summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/clang-tidy
diff options
context:
space:
mode:
Diffstat (limited to 'clang-tools-extra/clang-tidy')
-rw-r--r--clang-tools-extra/clang-tidy/ClangTidy.cpp12
-rw-r--r--clang-tools-extra/clang-tidy/ClangTidy.h4
-rw-r--r--clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.cpp30
-rw-r--r--clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.h23
-rw-r--r--clang-tools-extra/clang-tidy/ClangTidyModule.cpp5
-rw-r--r--clang-tools-extra/clang-tidy/ClangTidyModule.h2
6 files changed, 38 insertions, 38 deletions
diff --git a/clang-tools-extra/clang-tidy/ClangTidy.cpp b/clang-tools-extra/clang-tidy/ClangTidy.cpp
index ca91842062b..ec528ba9083 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<std::unique_ptr<ClangTidyCheck>> Checks;
- ChecksFilter &Filter = Context.getChecksFilter();
+ GlobList &Filter = Context.getChecksFilter();
CheckFactories->createChecks(Filter, Checks);
std::unique_ptr<ast_matchers::MatchFinder> Finder(
@@ -252,10 +252,10 @@ clang::ASTConsumer *ClangTidyASTConsumerFactory::CreateASTConsumer(
}
std::vector<std::string>
-ClangTidyASTConsumerFactory::getCheckNames(ChecksFilter &Filter) {
+ClangTidyASTConsumerFactory::getCheckNames(GlobList &Filter) {
std::vector<std::string> 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 8b181fc8c90..005f92e5176 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<std::string> getCheckNames(ChecksFilter &Filter);
+ std::vector<std::string> getCheckNames(GlobList &Filter);
private:
typedef std::vector<std::pair<std::string, bool> > CheckersList;
- CheckersList getCheckersControlList(ChecksFilter &Filter);
+ CheckersList getCheckersControlList(GlobList &Filter);
ClangTidyContext &Context;
std::unique_ptr<ClangTidyCheckFactories> CheckFactories;
diff --git a/clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.cpp b/clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.cpp
index b22fdcb3f67..9d0b70045fe 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)) {}
-
-bool ChecksFilter::isCheckEnabled(StringRef Name, bool Enabled) {
- if (Regex.match(Name))
- Enabled = Positive;
-
- if (NextFilter)
- Enabled = NextFilter->isCheckEnabled(Name, Enabled);
- return Enabled;
+GlobList::GlobList(StringRef Globs)
+ : Positive(!ConsumeNegativeIndicator(Globs)),
+ Regex(ConsumeGlob(Globs)),
+ NextGlob(Globs.empty() ? nullptr : new GlobList(Globs)) {}
+
+bool GlobList::contains(StringRef S, bool Contains) {
+ if (Regex.match(S))
+ Contains = Positive;
+
+ 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 d1529a93d69..107a7817a6f 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<ChecksFilter> NextFilter;
+ std::unique_ptr<GlobList> 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<ClangTidyOptionsProvider> OptionsProvider;
std::string CurrentFile;
- std::unique_ptr<ChecksFilter> CheckFilter;
+ std::unique_ptr<GlobList> CheckFilter;
ClangTidyStats Stats;
diff --git a/clang-tools-extra/clang-tidy/ClangTidyModule.cpp b/clang-tools-extra/clang-tidy/ClangTidyModule.cpp
index 40812a2eba1..759fb26af2f 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<std::unique_ptr<ClangTidyCheck>> &Checks) {
+ GlobList &Filter, std::vector<std::unique_ptr<ClangTidyCheck>> &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 625be7aa482..c9c51438a00 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<std::unique_ptr<ClangTidyCheck>> &Checks);
typedef std::map<std::string, CheckFactoryBase *> FactoryMap;
OpenPOWER on IntegriCloud