aboutsummaryrefslogtreecommitdiff
path: root/clang-tidy/ClangTidy.cpp
diff options
context:
space:
mode:
authorAlexander Kornienko <alexfh@google.com>2016-11-08 07:43:42 +0000
committerAlexander Kornienko <alexfh@google.com>2016-11-08 07:43:42 +0000
commit9234817c638eda1885bbb2c546b5219baa889f69 (patch)
tree82f024918734dccf91585f4d3e5a6c0a4dd9ea62 /clang-tidy/ClangTidy.cpp
parent4b3d0b30165847f8657986442697af094caab824 (diff)
Use AnalyzerOptions::getRegisteredCheckers() instead of clang/StaticAnalyzer/Checkers/Checkers.inc
Summary: Depends on D26310. Reviewers: zaks.anna, hokein Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D26311 git-svn-id: https://llvm.org/svn/llvm-project/clang-tools-extra/trunk@286219 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'clang-tidy/ClangTidy.cpp')
-rw-r--r--clang-tidy/ClangTidy.cpp70
1 files changed, 30 insertions, 40 deletions
diff --git a/clang-tidy/ClangTidy.cpp b/clang-tidy/ClangTidy.cpp
index df865993..a03f3fe9 100644
--- a/clang-tidy/ClangTidy.cpp
+++ b/clang-tidy/ClangTidy.cpp
@@ -56,15 +56,6 @@ namespace tidy {
namespace {
static const char *AnalyzerCheckNamePrefix = "clang-analyzer-";
-static const StringRef StaticAnalyzerChecks[] = {
-#define GET_CHECKERS
-#define CHECKER(FULLNAME, CLASS, DESCFILE, HELPTEXT, GROUPINDEX, HIDDEN) \
- FULLNAME,
-#include "clang/StaticAnalyzer/Checkers/Checkers.inc"
-#undef CHECKER
-#undef GET_CHECKERS
-};
-
class AnalyzerDiagnosticConsumer : public ento::PathDiagnosticConsumer {
public:
AnalyzerDiagnosticConsumer(ClangTidyContext &Context) : Context(Context) {}
@@ -296,6 +287,36 @@ static void setStaticAnalyzerCheckerOpts(const ClangTidyOptions &Opts,
}
}
+typedef std::vector<std::pair<std::string, bool>> CheckersList;
+
+static CheckersList getCheckersControlList(GlobList &Filter) {
+ CheckersList List;
+
+ const auto &RegisteredCheckers =
+ AnalyzerOptions::getRegisteredCheckers(/*IncludeExperimental=*/false);
+ bool AnalyzerChecksEnabled = false;
+ for (StringRef CheckName : RegisteredCheckers) {
+ std::string ClangTidyCheckName((AnalyzerCheckNamePrefix + CheckName).str());
+ AnalyzerChecksEnabled |= Filter.contains(ClangTidyCheckName);
+ }
+
+ if (!AnalyzerChecksEnabled)
+ return List;
+
+ // List all static analyzer checkers that our filter enables.
+ //
+ // Always add all core checkers if any other static analyzer check is enabled.
+ // This is currently necessary, as other path sensitive checks rely on the
+ // core checkers.
+ for (StringRef CheckName : RegisteredCheckers) {
+ std::string ClangTidyCheckName((AnalyzerCheckNamePrefix + CheckName).str());
+
+ if (CheckName.startswith("core") || Filter.contains(ClangTidyCheckName))
+ List.emplace_back(CheckName, true);
+ }
+ return List;
+}
+
std::unique_ptr<clang::ASTConsumer>
ClangTidyASTConsumerFactory::CreateASTConsumer(
clang::CompilerInstance &Compiler, StringRef File) {
@@ -379,37 +400,6 @@ ClangTidyOptions::OptionMap ClangTidyASTConsumerFactory::getCheckOptions() {
return Options;
}
-ClangTidyASTConsumerFactory::CheckersList
-ClangTidyASTConsumerFactory::getCheckersControlList(GlobList &Filter) {
- CheckersList List;
-
- bool AnalyzerChecksEnabled = false;
- for (StringRef CheckName : StaticAnalyzerChecks) {
- std::string Checker((AnalyzerCheckNamePrefix + CheckName).str());
- AnalyzerChecksEnabled =
- AnalyzerChecksEnabled ||
- (!CheckName.startswith("debug") && Filter.contains(Checker));
- }
-
- if (AnalyzerChecksEnabled) {
- // Run our regex against all possible static analyzer checkers. Note that
- // debug checkers print values / run programs to visualize the CFG and are
- // thus not applicable to clang-tidy in general.
- //
- // Always add all core checkers if any other static analyzer checks are
- // enabled. This is currently necessary, as other path sensitive checks
- // rely on the core checkers.
- for (StringRef CheckName : StaticAnalyzerChecks) {
- std::string Checker((AnalyzerCheckNamePrefix + CheckName).str());
-
- if (CheckName.startswith("core") ||
- (!CheckName.startswith("debug") && Filter.contains(Checker)))
- List.push_back(std::make_pair(CheckName, true));
- }
- }
- return List;
-}
-
DiagnosticBuilder ClangTidyCheck::diag(SourceLocation Loc, StringRef Message,
DiagnosticIDs::Level Level) {
return Context->diag(CheckName, Loc, Message, Level);