From b3d331d18dbfdfb356b234077bc0bf14a0fdea14 Mon Sep 17 00:00:00 2001 From: Alexander Kornienko Date: Wed, 6 Aug 2014 11:49:10 +0000 Subject: [PATCH] Rename ChecksFilter to GlobList, as there's nothing specific to checks in it. Summary: Rename ChecksFilter to GlobList, as there's nothing specific to checks in it. It's a rather generic way to represent sets of strings (or patterns), so it may be used for something else in ClangTidy. The new name would not look strange when used to filter other entities. Reviewers: klimek Reviewed By: klimek Subscribers: cfe-commits Differential Revision: http://reviews.llvm.org/D4806 llvm-svn: 214961 --- clang-tools-extra/clang-tidy/ClangTidy.cpp | 12 +-- clang-tools-extra/clang-tidy/ClangTidy.h | 4 +- .../ClangTidyDiagnosticConsumer.cpp | 26 +++---- .../clang-tidy/ClangTidyDiagnosticConsumer.h | 23 +++--- .../clang-tidy/ClangTidyModule.cpp | 5 +- .../clang-tidy/ClangTidyModule.h | 2 +- .../ClangTidyDiagnosticConsumerTest.cpp | 76 +++++++++---------- 7 files changed, 74 insertions(+), 74 deletions(-) diff --git a/clang-tools-extra/clang-tidy/ClangTidy.cpp b/clang-tools-extra/clang-tidy/ClangTidy.cpp index ca91842062b2..ec528ba90837 100644 --- a/clang-tools-extra/clang-tidy/ClangTidy.cpp +++ b/clang-tools-extra/clang-tidy/ClangTidy.cpp @@ -213,7 +213,7 @@ clang::ASTConsumer *ClangTidyASTConsumerFactory::CreateASTConsumer( Context.setASTContext(&Compiler.getASTContext()); std::vector> Checks; - ChecksFilter &Filter = Context.getChecksFilter(); + GlobList &Filter = Context.getChecksFilter(); CheckFactories->createChecks(Filter, Checks); std::unique_ptr Finder( @@ -252,10 +252,10 @@ clang::ASTConsumer *ClangTidyASTConsumerFactory::CreateASTConsumer( } std::vector -ClangTidyASTConsumerFactory::getCheckNames(ChecksFilter &Filter) { +ClangTidyASTConsumerFactory::getCheckNames(GlobList &Filter) { std::vector CheckNames; for (const auto &CheckFactory : *CheckFactories) { - if (Filter.isCheckEnabled(CheckFactory.first)) + if (Filter.contains(CheckFactory.first)) CheckNames.push_back(CheckFactory.first); } @@ -267,7 +267,7 @@ ClangTidyASTConsumerFactory::getCheckNames(ChecksFilter &Filter) { } ClangTidyASTConsumerFactory::CheckersList -ClangTidyASTConsumerFactory::getCheckersControlList(ChecksFilter &Filter) { +ClangTidyASTConsumerFactory::getCheckersControlList(GlobList &Filter) { CheckersList List; bool AnalyzerChecksEnabled = false; @@ -275,7 +275,7 @@ ClangTidyASTConsumerFactory::getCheckersControlList(ChecksFilter &Filter) { std::string Checker((AnalyzerCheckNamePrefix + CheckName).str()); AnalyzerChecksEnabled = AnalyzerChecksEnabled || - (!CheckName.startswith("debug") && Filter.isCheckEnabled(Checker)); + (!CheckName.startswith("debug") && Filter.contains(Checker)); } if (AnalyzerChecksEnabled) { @@ -290,7 +290,7 @@ ClangTidyASTConsumerFactory::getCheckersControlList(ChecksFilter &Filter) { std::string Checker((AnalyzerCheckNamePrefix + CheckName).str()); if (CheckName.startswith("core") || - (!CheckName.startswith("debug") && Filter.isCheckEnabled(Checker))) + (!CheckName.startswith("debug") && Filter.contains(Checker))) List.push_back(std::make_pair(CheckName, true)); } } diff --git a/clang-tools-extra/clang-tidy/ClangTidy.h b/clang-tools-extra/clang-tidy/ClangTidy.h index 8b181fc8c908..005f92e51760 100644 --- a/clang-tools-extra/clang-tidy/ClangTidy.h +++ b/clang-tools-extra/clang-tidy/ClangTidy.h @@ -103,11 +103,11 @@ public: StringRef File); /// \brief Get the list of enabled checks. - std::vector getCheckNames(ChecksFilter &Filter); + std::vector getCheckNames(GlobList &Filter); private: typedef std::vector > CheckersList; - CheckersList getCheckersControlList(ChecksFilter &Filter); + CheckersList getCheckersControlList(GlobList &Filter); ClangTidyContext &Context; std::unique_ptr CheckFactories; diff --git a/clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.cpp b/clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.cpp index b22fdcb3f677..9d0b70045fef 100644 --- a/clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.cpp +++ b/clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.cpp @@ -146,18 +146,18 @@ static llvm::Regex ConsumeGlob(StringRef &GlobList) { return llvm::Regex(RegexText); } -ChecksFilter::ChecksFilter(StringRef GlobList) - : Positive(!ConsumeNegativeIndicator(GlobList)), - Regex(ConsumeGlob(GlobList)), - NextFilter(GlobList.empty() ? nullptr : new ChecksFilter(GlobList)) {} +GlobList::GlobList(StringRef Globs) + : Positive(!ConsumeNegativeIndicator(Globs)), + Regex(ConsumeGlob(Globs)), + NextGlob(Globs.empty() ? nullptr : new GlobList(Globs)) {} -bool ChecksFilter::isCheckEnabled(StringRef Name, bool Enabled) { - if (Regex.match(Name)) - Enabled = Positive; +bool GlobList::contains(StringRef S, bool Contains) { + if (Regex.match(S)) + Contains = Positive; - if (NextFilter) - Enabled = NextFilter->isCheckEnabled(Name, Enabled); - return Enabled; + if (NextGlob) + Contains = NextGlob->contains(S, Contains); + return Contains; } ClangTidyContext::ClangTidyContext(ClangTidyOptionsProvider *OptionsProvider) @@ -202,7 +202,7 @@ void ClangTidyContext::setSourceManager(SourceManager *SourceMgr) { void ClangTidyContext::setCurrentFile(StringRef File) { CurrentFile = File; - CheckFilter.reset(new ChecksFilter(getOptions().Checks)); + CheckFilter.reset(new GlobList(getOptions().Checks)); } void ClangTidyContext::setASTContext(ASTContext *Context) { @@ -217,7 +217,7 @@ const ClangTidyOptions &ClangTidyContext::getOptions() const { return OptionsProvider->getOptions(CurrentFile); } -ChecksFilter &ClangTidyContext::getChecksFilter() { +GlobList &ClangTidyContext::getChecksFilter() { assert(CheckFilter != nullptr); return *CheckFilter; } @@ -248,7 +248,7 @@ ClangTidyDiagnosticConsumer::ClangTidyDiagnosticConsumer(ClangTidyContext &Ctx) void ClangTidyDiagnosticConsumer::finalizeLastError() { if (!Errors.empty()) { ClangTidyError &Error = Errors.back(); - if (!Context.getChecksFilter().isCheckEnabled(Error.CheckName) && + if (!Context.getChecksFilter().contains(Error.CheckName) && Error.DiagLevel != ClangTidyError::Error) { ++Context.Stats.ErrorsIgnoredCheckFilter; Errors.pop_back(); diff --git a/clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.h b/clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.h index d1529a93d69f..107a7817a6fb 100644 --- a/clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.h +++ b/clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.h @@ -65,24 +65,25 @@ struct ClangTidyError { Level DiagLevel; }; -/// \brief Filters checks by name. -class ChecksFilter { +/// \brief Read-only set of strings represented as a list of positive and +/// negative globs. Positive globs add all matched strings to the set, negative +/// globs remove them in the order of appearance in the list. +class GlobList { public: /// \brief \p GlobList is a comma-separated list of globs (only '*' /// metacharacter is supported) with optional '-' prefix to denote exclusion. - ChecksFilter(StringRef GlobList); + GlobList(StringRef Globs); - /// \brief Returns \c true if the check with the specified \p Name should be - /// enabled. The result is the last matching glob's Positive flag. If \p Name - /// is not matched by any globs, the check is not enabled. - bool isCheckEnabled(StringRef Name) { return isCheckEnabled(Name, false); } + /// \brief Returns \c true if the pattern matches \p S. The result is the last + /// matching glob's Positive flag. + bool contains(StringRef S) { return contains(S, false); } private: - bool isCheckEnabled(StringRef Name, bool Enabled); + bool contains(StringRef S, bool Contains); bool Positive; llvm::Regex Regex; - std::unique_ptr NextFilter; + std::unique_ptr NextGlob; }; /// \brief Contains displayed and ignored diagnostic counters for a ClangTidy @@ -145,7 +146,7 @@ public: StringRef getCheckName(unsigned DiagnosticID) const; /// \brief Returns check filter for the \c CurrentFile. - ChecksFilter &getChecksFilter(); + GlobList &getChecksFilter(); /// \brief Returns global options. const ClangTidyGlobalOptions &getGlobalOptions() const; @@ -179,7 +180,7 @@ private: std::unique_ptr OptionsProvider; std::string CurrentFile; - std::unique_ptr CheckFilter; + std::unique_ptr CheckFilter; ClangTidyStats Stats; diff --git a/clang-tools-extra/clang-tidy/ClangTidyModule.cpp b/clang-tools-extra/clang-tidy/ClangTidyModule.cpp index 40812a2eba13..759fb26af2f5 100644 --- a/clang-tools-extra/clang-tidy/ClangTidyModule.cpp +++ b/clang-tools-extra/clang-tidy/ClangTidyModule.cpp @@ -27,10 +27,9 @@ void ClangTidyCheckFactories::addCheckFactory(StringRef Name, } void ClangTidyCheckFactories::createChecks( - ChecksFilter &Filter, - std::vector> &Checks) { + GlobList &Filter, std::vector> &Checks) { for (const auto &Factory : Factories) { - if (Filter.isCheckEnabled(Factory.first)) { + if (Filter.contains(Factory.first)) { ClangTidyCheck *Check = Factory.second->createCheck(); Check->setName(Factory.first); Checks.emplace_back(Check); diff --git a/clang-tools-extra/clang-tidy/ClangTidyModule.h b/clang-tools-extra/clang-tidy/ClangTidyModule.h index 625be7aa482c..c9c51438a006 100644 --- a/clang-tools-extra/clang-tidy/ClangTidyModule.h +++ b/clang-tools-extra/clang-tidy/ClangTidyModule.h @@ -86,7 +86,7 @@ public: /// store them in \p Checks. /// /// The caller takes ownership of the return \c ClangTidyChecks. - void createChecks(ChecksFilter &Filter, + void createChecks(GlobList &Filter, std::vector> &Checks); typedef std::map FactoryMap; diff --git a/clang-tools-extra/unittests/clang-tidy/ClangTidyDiagnosticConsumerTest.cpp b/clang-tools-extra/unittests/clang-tidy/ClangTidyDiagnosticConsumerTest.cpp index bc2338552b29..4b5dbb2e6cee 100644 --- a/clang-tools-extra/unittests/clang-tidy/ClangTidyDiagnosticConsumerTest.cpp +++ b/clang-tools-extra/unittests/clang-tidy/ClangTidyDiagnosticConsumerTest.cpp @@ -28,57 +28,57 @@ TEST(ClangTidyDiagnosticConsumer, SortsErrors) { EXPECT_EQ("variable []", Errors[1].Message.Message); } -TEST(ChecksFilter, Empty) { - ChecksFilter Filter(""); +TEST(GlobList, Empty) { + GlobList Filter(""); - EXPECT_TRUE(Filter.isCheckEnabled("")); - EXPECT_FALSE(Filter.isCheckEnabled("aaa")); + EXPECT_TRUE(Filter.contains("")); + EXPECT_FALSE(Filter.contains("aaa")); } -TEST(ChecksFilter, Nothing) { - ChecksFilter Filter("-*"); +TEST(GlobList, Nothing) { + GlobList Filter("-*"); - EXPECT_FALSE(Filter.isCheckEnabled("")); - EXPECT_FALSE(Filter.isCheckEnabled("a")); - EXPECT_FALSE(Filter.isCheckEnabled("-*")); - EXPECT_FALSE(Filter.isCheckEnabled("-")); - EXPECT_FALSE(Filter.isCheckEnabled("*")); + EXPECT_FALSE(Filter.contains("")); + EXPECT_FALSE(Filter.contains("a")); + EXPECT_FALSE(Filter.contains("-*")); + EXPECT_FALSE(Filter.contains("-")); + EXPECT_FALSE(Filter.contains("*")); } -TEST(ChecksFilter, Everything) { - ChecksFilter Filter("*"); +TEST(GlobList, Everything) { + GlobList Filter("*"); - EXPECT_TRUE(Filter.isCheckEnabled("")); - EXPECT_TRUE(Filter.isCheckEnabled("aaaa")); - EXPECT_TRUE(Filter.isCheckEnabled("-*")); - EXPECT_TRUE(Filter.isCheckEnabled("-")); - EXPECT_TRUE(Filter.isCheckEnabled("*")); + EXPECT_TRUE(Filter.contains("")); + EXPECT_TRUE(Filter.contains("aaaa")); + EXPECT_TRUE(Filter.contains("-*")); + EXPECT_TRUE(Filter.contains("-")); + EXPECT_TRUE(Filter.contains("*")); } -TEST(ChecksFilter, Simple) { - ChecksFilter Filter("aaa"); +TEST(GlobList, Simple) { + GlobList Filter("aaa"); - EXPECT_TRUE(Filter.isCheckEnabled("aaa")); - EXPECT_FALSE(Filter.isCheckEnabled("")); - EXPECT_FALSE(Filter.isCheckEnabled("aa")); - EXPECT_FALSE(Filter.isCheckEnabled("aaaa")); - EXPECT_FALSE(Filter.isCheckEnabled("bbb")); + EXPECT_TRUE(Filter.contains("aaa")); + EXPECT_FALSE(Filter.contains("")); + EXPECT_FALSE(Filter.contains("aa")); + EXPECT_FALSE(Filter.contains("aaaa")); + EXPECT_FALSE(Filter.contains("bbb")); } -TEST(ChecksFilter, Complex) { - ChecksFilter Filter("*,-a.*,-b.*,a.1.*,-a.1.A.*,-..,-...,-..+,-*$,-*qwe*"); +TEST(GlobList, Complex) { + GlobList Filter("*,-a.*,-b.*,a.1.*,-a.1.A.*,-..,-...,-..+,-*$,-*qwe*"); - EXPECT_TRUE(Filter.isCheckEnabled("aaa")); - EXPECT_TRUE(Filter.isCheckEnabled("qqq")); - EXPECT_FALSE(Filter.isCheckEnabled("a.")); - EXPECT_FALSE(Filter.isCheckEnabled("a.b")); - EXPECT_FALSE(Filter.isCheckEnabled("b.")); - EXPECT_FALSE(Filter.isCheckEnabled("b.b")); - EXPECT_TRUE(Filter.isCheckEnabled("a.1.b")); - EXPECT_FALSE(Filter.isCheckEnabled("a.1.A.a")); - EXPECT_FALSE(Filter.isCheckEnabled("qwe")); - EXPECT_FALSE(Filter.isCheckEnabled("asdfqweasdf")); - EXPECT_TRUE(Filter.isCheckEnabled("asdfqwEasdf")); + EXPECT_TRUE(Filter.contains("aaa")); + EXPECT_TRUE(Filter.contains("qqq")); + EXPECT_FALSE(Filter.contains("a.")); + EXPECT_FALSE(Filter.contains("a.b")); + EXPECT_FALSE(Filter.contains("b.")); + EXPECT_FALSE(Filter.contains("b.b")); + EXPECT_TRUE(Filter.contains("a.1.b")); + EXPECT_FALSE(Filter.contains("a.1.A.a")); + EXPECT_FALSE(Filter.contains("qwe")); + EXPECT_FALSE(Filter.contains("asdfqweasdf")); + EXPECT_TRUE(Filter.contains("asdfqwEasdf")); } } // namespace test