[PATCH] D90975: [clangd] Don't run clang-tidy AST traversal if there are no checks.
Sam McCall via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Nov 6 14:39:05 PST 2020
sammccall created this revision.
sammccall added a reviewer: njames93.
Herald added subscribers: cfe-commits, usaxena95, kadircet, arphaman.
Herald added a project: clang.
sammccall requested review of this revision.
Herald added subscribers: MaskRay, ilya-biryukov.
While here, clean up ParsedAST::build a bit:
- remove FIXMEs that were fixed long ago by ReplayPreamble
- remove redundant if, ClangTidyContext is not actually optional
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D90975
Files:
clang-tools-extra/clangd/ParsedAST.cpp
Index: clang-tools-extra/clangd/ParsedAST.cpp
===================================================================
--- clang-tools-extra/clangd/ParsedAST.cpp
+++ clang-tools-extra/clangd/ParsedAST.cpp
@@ -303,9 +303,18 @@
CTContext->setASTContext(&Clang->getASTContext());
CTContext->setCurrentFile(Filename);
CTChecks = CTFactories.createChecks(CTContext.getPointer());
- ASTDiags.setLevelAdjuster([&CTContext](DiagnosticsEngine::Level DiagLevel,
- const clang::Diagnostic &Info) {
- if (CTContext) {
+ llvm::erase_if(CTChecks, [&](const auto &Check) {
+ return !Check->isLanguageVersionSupported(CTContext->getLangOpts());
+ });
+ Preprocessor *PP = &Clang->getPreprocessor();
+ for (const auto &Check : CTChecks) {
+ Check->registerPPCallbacks(Clang->getSourceManager(), PP, PP);
+ Check->registerMatchers(&CTFinder);
+ }
+
+ if (!CTChecks.empty()) {
+ ASTDiags.setLevelAdjuster([&CTContext](DiagnosticsEngine::Level DiagLevel,
+ const clang::Diagnostic &Info) {
std::string CheckName = CTContext->getCheckName(Info.getID());
bool IsClangTidyDiag = !CheckName.empty();
if (IsClangTidyDiag) {
@@ -330,17 +339,8 @@
return DiagnosticsEngine::Error;
}
}
- }
- return DiagLevel;
- });
- Preprocessor *PP = &Clang->getPreprocessor();
- for (const auto &Check : CTChecks) {
- if (!Check->isLanguageVersionSupported(CTContext->getLangOpts()))
- continue;
- // FIXME: the PP callbacks skip the entire preamble.
- // Checks that want to see #includes in the main file do not see them.
- Check->registerPPCallbacks(Clang->getSourceManager(), PP, PP);
- Check->registerMatchers(&CTFinder);
+ return DiagLevel;
+ });
}
}
@@ -415,7 +415,7 @@
std::vector<Decl *> ParsedDecls = Action->takeTopLevelDecls();
// AST traversals should exclude the preamble, to avoid performance cliffs.
Clang->getASTContext().setTraversalScope(ParsedDecls);
- {
+ if (!CTChecks.empty()) {
// Run the AST-dependent part of the clang-tidy checks.
// (The preprocessor part ran already, via PPCallbacks).
trace::Span Tracer("ClangTidyMatch");
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D90975.303554.patch
Type: text/x-patch
Size: 2312 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20201106/14bd5e01/attachment-0001.bin>
More information about the cfe-commits
mailing list