[clang-tidy] Fix treating non-space whitespaces in checks list.

Summary:
This furtherly improves r295303: [clang-tidy] Ignore spaces between globs in the Checks option.
Trims all whitespaces and not only spaces and correctly computes the offset of the checks list (taking the size before trimming).

Reviewers: alexfh

Reviewed By: alexfh

Subscribers: cfe-commits, JDevlieghere

Differential Revision: https://reviews.llvm.org/D30567

llvm-svn: 298621
This commit is contained in:
Marek Kurdej 2017-03-23 16:32:06 +00:00
parent 4e7b71bc86
commit 92ecb51fae
2 changed files with 713 additions and 705 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1,87 +1,94 @@
#include "ClangTidy.h" #include "ClangTidy.h"
#include "ClangTidyTest.h" #include "ClangTidyTest.h"
#include "gtest/gtest.h" #include "gtest/gtest.h"
namespace clang { namespace clang {
namespace tidy { namespace tidy {
namespace test { namespace test {
class TestCheck : public ClangTidyCheck { class TestCheck : public ClangTidyCheck {
public: public:
TestCheck(StringRef Name, ClangTidyContext *Context) TestCheck(StringRef Name, ClangTidyContext *Context)
: ClangTidyCheck(Name, Context) {} : ClangTidyCheck(Name, Context) {}
void registerMatchers(ast_matchers::MatchFinder *Finder) override { void registerMatchers(ast_matchers::MatchFinder *Finder) override {
Finder->addMatcher(ast_matchers::varDecl().bind("var"), this); Finder->addMatcher(ast_matchers::varDecl().bind("var"), this);
} }
void check(const ast_matchers::MatchFinder::MatchResult &Result) override { void check(const ast_matchers::MatchFinder::MatchResult &Result) override {
const auto *Var = Result.Nodes.getNodeAs<VarDecl>("var"); const auto *Var = Result.Nodes.getNodeAs<VarDecl>("var");
// Add diagnostics in the wrong order. // Add diagnostics in the wrong order.
diag(Var->getLocation(), "variable"); diag(Var->getLocation(), "variable");
diag(Var->getTypeSpecStartLoc(), "type specifier"); diag(Var->getTypeSpecStartLoc(), "type specifier");
} }
}; };
TEST(ClangTidyDiagnosticConsumer, SortsErrors) { TEST(ClangTidyDiagnosticConsumer, SortsErrors) {
std::vector<ClangTidyError> Errors; std::vector<ClangTidyError> Errors;
runCheckOnCode<TestCheck>("int a;", &Errors); runCheckOnCode<TestCheck>("int a;", &Errors);
EXPECT_EQ(2ul, Errors.size()); EXPECT_EQ(2ul, Errors.size());
EXPECT_EQ("type specifier", Errors[0].Message.Message); EXPECT_EQ("type specifier", Errors[0].Message.Message);
EXPECT_EQ("variable", Errors[1].Message.Message); EXPECT_EQ("variable", Errors[1].Message.Message);
} }
TEST(GlobList, Empty) { TEST(GlobList, Empty) {
GlobList Filter(""); GlobList Filter("");
EXPECT_TRUE(Filter.contains("")); EXPECT_TRUE(Filter.contains(""));
EXPECT_FALSE(Filter.contains("aaa")); EXPECT_FALSE(Filter.contains("aaa"));
} }
TEST(GlobList, Nothing) { TEST(GlobList, Nothing) {
GlobList Filter("-*"); GlobList Filter("-*");
EXPECT_FALSE(Filter.contains("")); EXPECT_FALSE(Filter.contains(""));
EXPECT_FALSE(Filter.contains("a")); EXPECT_FALSE(Filter.contains("a"));
EXPECT_FALSE(Filter.contains("-*")); EXPECT_FALSE(Filter.contains("-*"));
EXPECT_FALSE(Filter.contains("-")); EXPECT_FALSE(Filter.contains("-"));
EXPECT_FALSE(Filter.contains("*")); EXPECT_FALSE(Filter.contains("*"));
} }
TEST(GlobList, Everything) { TEST(GlobList, Everything) {
GlobList Filter("*"); GlobList Filter("*");
EXPECT_TRUE(Filter.contains("")); EXPECT_TRUE(Filter.contains(""));
EXPECT_TRUE(Filter.contains("aaaa")); EXPECT_TRUE(Filter.contains("aaaa"));
EXPECT_TRUE(Filter.contains("-*")); EXPECT_TRUE(Filter.contains("-*"));
EXPECT_TRUE(Filter.contains("-")); EXPECT_TRUE(Filter.contains("-"));
EXPECT_TRUE(Filter.contains("*")); EXPECT_TRUE(Filter.contains("*"));
} }
TEST(GlobList, Simple) { TEST(GlobList, Simple) {
GlobList Filter("aaa"); GlobList Filter("aaa");
EXPECT_TRUE(Filter.contains("aaa")); EXPECT_TRUE(Filter.contains("aaa"));
EXPECT_FALSE(Filter.contains("")); EXPECT_FALSE(Filter.contains(""));
EXPECT_FALSE(Filter.contains("aa")); EXPECT_FALSE(Filter.contains("aa"));
EXPECT_FALSE(Filter.contains("aaaa")); EXPECT_FALSE(Filter.contains("aaaa"));
EXPECT_FALSE(Filter.contains("bbb")); EXPECT_FALSE(Filter.contains("bbb"));
} }
TEST(GlobList, Complex) { TEST(GlobList, WhitespacesAtBegin) {
GlobList Filter("*,-a.*, -b.*, a.1.* ,-a.1.A.*,-..,-...,-..+,-*$, -*qwe* "); GlobList Filter("-*, a.b.*");
EXPECT_TRUE(Filter.contains("aaa")); EXPECT_TRUE(Filter.contains("a.b.c"));
EXPECT_TRUE(Filter.contains("qqq")); EXPECT_FALSE(Filter.contains("b.c"));
EXPECT_FALSE(Filter.contains("a.")); }
EXPECT_FALSE(Filter.contains("a.b"));
EXPECT_FALSE(Filter.contains("b.")); TEST(GlobList, Complex) {
EXPECT_FALSE(Filter.contains("b.b")); GlobList Filter("*,-a.*, -b.*, a.1.* ,-a.1.A.*,-..,-...,-..+,-*$, -*qwe* ");
EXPECT_TRUE(Filter.contains("a.1.b"));
EXPECT_FALSE(Filter.contains("a.1.A.a")); EXPECT_TRUE(Filter.contains("aaa"));
EXPECT_FALSE(Filter.contains("qwe")); EXPECT_TRUE(Filter.contains("qqq"));
EXPECT_FALSE(Filter.contains("asdfqweasdf")); EXPECT_FALSE(Filter.contains("a."));
EXPECT_TRUE(Filter.contains("asdfqwEasdf")); EXPECT_FALSE(Filter.contains("a.b"));
} EXPECT_FALSE(Filter.contains("b."));
EXPECT_FALSE(Filter.contains("b.b"));
} // namespace test EXPECT_TRUE(Filter.contains("a.1.b"));
} // namespace tidy EXPECT_FALSE(Filter.contains("a.1.A.a"));
} // namespace clang EXPECT_FALSE(Filter.contains("qwe"));
EXPECT_FALSE(Filter.contains("asdfqweasdf"));
EXPECT_TRUE(Filter.contains("asdfqwEasdf"));
}
} // namespace test
} // namespace tidy
} // namespace clang