Changeset View
Changeset View
Standalone View
Standalone View
clang-tidy/ClangTidy.cpp
Show First 20 Lines • Show All 297 Lines • ▼ Show 20 Lines | for (const auto &Opt : Opts.CheckOptions) { | ||||
if (!OptName.startswith(AnalyzerPrefix)) | if (!OptName.startswith(AnalyzerPrefix)) | ||||
continue; | continue; | ||||
AnalyzerOptions->Config[OptName.substr(AnalyzerPrefix.size())] = Opt.second; | AnalyzerOptions->Config[OptName.substr(AnalyzerPrefix.size())] = Opt.second; | ||||
} | } | ||||
} | } | ||||
typedef std::vector<std::pair<std::string, bool>> CheckersList; | typedef std::vector<std::pair<std::string, bool>> CheckersList; | ||||
static CheckersList getCheckersControlList(ClangTidyContext &Context) { | static CheckersList getCheckersControlList(ClangTidyContext &Context, | ||||
bool IncludeExperimental) { | |||||
CheckersList List; | CheckersList List; | ||||
const auto &RegisteredCheckers = | const auto &RegisteredCheckers = | ||||
AnalyzerOptions::getRegisteredCheckers(/*IncludeExperimental=*/false); | AnalyzerOptions::getRegisteredCheckers(IncludeExperimental); | ||||
bool AnalyzerChecksEnabled = false; | bool AnalyzerChecksEnabled = false; | ||||
for (StringRef CheckName : RegisteredCheckers) { | for (StringRef CheckName : RegisteredCheckers) { | ||||
std::string ClangTidyCheckName((AnalyzerCheckNamePrefix + CheckName).str()); | std::string ClangTidyCheckName((AnalyzerCheckNamePrefix + CheckName).str()); | ||||
AnalyzerChecksEnabled |= Context.isCheckEnabled(ClangTidyCheckName); | AnalyzerChecksEnabled |= Context.isCheckEnabled(ClangTidyCheckName); | ||||
} | } | ||||
if (!AnalyzerChecksEnabled) | if (!AnalyzerChecksEnabled) | ||||
return List; | return List; | ||||
▲ Show 20 Lines • Show All 45 Lines • ▼ Show 20 Lines | for (auto &Check : Checks) { | ||||
Check->registerPPCallbacks(Compiler); | Check->registerPPCallbacks(Compiler); | ||||
} | } | ||||
std::vector<std::unique_ptr<ASTConsumer>> Consumers; | std::vector<std::unique_ptr<ASTConsumer>> Consumers; | ||||
if (!Checks.empty()) | if (!Checks.empty()) | ||||
Consumers.push_back(Finder->newASTConsumer()); | Consumers.push_back(Finder->newASTConsumer()); | ||||
AnalyzerOptionsRef AnalyzerOptions = Compiler.getAnalyzerOpts(); | AnalyzerOptionsRef AnalyzerOptions = Compiler.getAnalyzerOpts(); | ||||
// FIXME: Remove this option once clang's cfg-temporary-dtors option defaults | // FIXME: Remove this option once clang's cfg-temporary-dtors option defaults | ||||
// to true. | // to true. | ||||
AnalyzerOptions->Config["cfg-temporary-dtors"] = | AnalyzerOptions->Config["cfg-temporary-dtors"] = | ||||
Context.getOptions().AnalyzeTemporaryDtors ? "true" : "false"; | Context.getOptions().AnalyzeTemporaryDtors ? "true" : "false"; | ||||
NoQ: Btw this is already enabled by default. | |||||
Not Done ReplyInline ActionsShould we kill the flag completely? alexfh: Should we kill the flag completely? | |||||
Not Done ReplyInline ActionsI've removed the clang-tidy configuration option in r331456. alexfh: I've removed the clang-tidy configuration option in r331456. | |||||
Not Done ReplyInline ActionsI didnt modify this line of code. Are you just wanting me to rebase? pfultz2: I didnt modify this line of code. Are you just wanting me to rebase? | |||||
Not Done ReplyInline ActionsI was just answering NoQ's comment. Sorry for the off-topic. alexfh: I was just answering NoQ's comment. Sorry for the off-topic. | |||||
AnalyzerOptions->CheckersControlList = getCheckersControlList(Context); | AnalyzerOptions->CheckersControlList = getCheckersControlList( | ||||
Context, *Context.getOptions().AllowEnablingAlphaChecks); | |||||
if (!AnalyzerOptions->CheckersControlList.empty()) { | if (!AnalyzerOptions->CheckersControlList.empty()) { | ||||
setStaticAnalyzerCheckerOpts(Context.getOptions(), AnalyzerOptions); | setStaticAnalyzerCheckerOpts(Context.getOptions(), AnalyzerOptions); | ||||
AnalyzerOptions->AnalysisStoreOpt = RegionStoreModel; | AnalyzerOptions->AnalysisStoreOpt = RegionStoreModel; | ||||
AnalyzerOptions->AnalysisDiagOpt = PD_NONE; | AnalyzerOptions->AnalysisDiagOpt = PD_NONE; | ||||
AnalyzerOptions->AnalyzeNestedBlocks = true; | AnalyzerOptions->AnalyzeNestedBlocks = true; | ||||
AnalyzerOptions->eagerlyAssumeBinOpBifurcation = true; | AnalyzerOptions->eagerlyAssumeBinOpBifurcation = true; | ||||
std::unique_ptr<ento::AnalysisASTConsumer> AnalysisConsumer = | std::unique_ptr<ento::AnalysisASTConsumer> AnalysisConsumer = | ||||
ento::CreateAnalysisConsumer(Compiler); | ento::CreateAnalysisConsumer(Compiler); | ||||
AnalysisConsumer->AddDiagnosticConsumer( | AnalysisConsumer->AddDiagnosticConsumer( | ||||
new AnalyzerDiagnosticConsumer(Context)); | new AnalyzerDiagnosticConsumer(Context)); | ||||
Consumers.push_back(std::move(AnalysisConsumer)); | Consumers.push_back(std::move(AnalysisConsumer)); | ||||
} | } | ||||
return llvm::make_unique<ClangTidyASTConsumer>( | return llvm::make_unique<ClangTidyASTConsumer>( | ||||
std::move(Consumers), std::move(Finder), std::move(Checks)); | std::move(Consumers), std::move(Finder), std::move(Checks)); | ||||
} | } | ||||
std::vector<std::string> ClangTidyASTConsumerFactory::getCheckNames() { | std::vector<std::string> ClangTidyASTConsumerFactory::getCheckNames() { | ||||
std::vector<std::string> CheckNames; | std::vector<std::string> CheckNames; | ||||
for (const auto &CheckFactory : *CheckFactories) { | for (const auto &CheckFactory : *CheckFactories) { | ||||
if (Context.isCheckEnabled(CheckFactory.first)) | if (Context.isCheckEnabled(CheckFactory.first)) | ||||
CheckNames.push_back(CheckFactory.first); | CheckNames.push_back(CheckFactory.first); | ||||
} | } | ||||
for (const auto &AnalyzerCheck : getCheckersControlList(Context)) | for (const auto &AnalyzerCheck : getCheckersControlList( | ||||
Context, *Context.getOptions().AllowEnablingAlphaChecks)) | |||||
CheckNames.push_back(AnalyzerCheckNamePrefix + AnalyzerCheck.first); | CheckNames.push_back(AnalyzerCheckNamePrefix + AnalyzerCheck.first); | ||||
std::sort(CheckNames.begin(), CheckNames.end()); | std::sort(CheckNames.begin(), CheckNames.end()); | ||||
return CheckNames; | return CheckNames; | ||||
} | } | ||||
ClangTidyOptions::OptionMap ClangTidyASTConsumerFactory::getCheckOptions() { | ClangTidyOptions::OptionMap ClangTidyASTConsumerFactory::getCheckOptions() { | ||||
ClangTidyOptions::OptionMap Options; | ClangTidyOptions::OptionMap Options; | ||||
▲ Show 20 Lines • Show All 184 Lines • Show Last 20 Lines |
Btw this is already enabled by default.