kbobyrev updated this revision to Diff 290453. kbobyrev added a comment. Also check if deinition comes from unwwanted file (e.g. omit forward declarations).
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D85426/new/ https://reviews.llvm.org/D85426 Files: clang-tools-extra/clangd/index/SymbolCollector.cpp Index: clang-tools-extra/clangd/index/SymbolCollector.cpp =================================================================== --- clang-tools-extra/clangd/index/SymbolCollector.cpp +++ clang-tools-extra/clangd/index/SymbolCollector.cpp @@ -256,6 +256,11 @@ assert(ASTCtx && PP.get() && "ASTContext and Preprocessor must be set."); assert(CompletionAllocator && CompletionTUInfo); assert(ASTNode.OrigD); + auto &SM = ASTCtx->getSourceManager(); + if (!SM.isWrittenInBuiltinFile(Loc) && + (!shouldIndexFile(SM.getFileID(Loc)) || + !shouldIndexFile(SM.getFileID(D->getLocation())))) + return true; // Indexing API puts canonical decl into D, which might not have a valid // source location for implicit/built-in decls. Fallback to original decl in // such cases. @@ -298,7 +303,6 @@ // Mark D as referenced if this is a reference coming from the main file. // D may not be an interesting symbol, but it's cheaper to check at the end. - auto &SM = ASTCtx->getSourceManager(); if (Opts.CountReferences && (Roles & static_cast<unsigned>(index::SymbolRole::Reference)) && SM.getFileID(SM.getSpellingLoc(Loc)) == SM.getMainFileID()) @@ -405,6 +409,9 @@ return true; const auto &SM = PP->getSourceManager(); + if (!SM.isWrittenInBuiltinFile(Loc) && !shouldIndexFile(SM.getFileID(Loc))) + return true; + auto DefLoc = MI->getDefinitionLoc(); // Also avoid storing predefined macros like __DBL_MIN__. if (SM.isWrittenInBuiltinFile(DefLoc))
Index: clang-tools-extra/clangd/index/SymbolCollector.cpp =================================================================== --- clang-tools-extra/clangd/index/SymbolCollector.cpp +++ clang-tools-extra/clangd/index/SymbolCollector.cpp @@ -256,6 +256,11 @@ assert(ASTCtx && PP.get() && "ASTContext and Preprocessor must be set."); assert(CompletionAllocator && CompletionTUInfo); assert(ASTNode.OrigD); + auto &SM = ASTCtx->getSourceManager(); + if (!SM.isWrittenInBuiltinFile(Loc) && + (!shouldIndexFile(SM.getFileID(Loc)) || + !shouldIndexFile(SM.getFileID(D->getLocation())))) + return true; // Indexing API puts canonical decl into D, which might not have a valid // source location for implicit/built-in decls. Fallback to original decl in // such cases. @@ -298,7 +303,6 @@ // Mark D as referenced if this is a reference coming from the main file. // D may not be an interesting symbol, but it's cheaper to check at the end. - auto &SM = ASTCtx->getSourceManager(); if (Opts.CountReferences && (Roles & static_cast<unsigned>(index::SymbolRole::Reference)) && SM.getFileID(SM.getSpellingLoc(Loc)) == SM.getMainFileID()) @@ -405,6 +409,9 @@ return true; const auto &SM = PP->getSourceManager(); + if (!SM.isWrittenInBuiltinFile(Loc) && !shouldIndexFile(SM.getFileID(Loc))) + return true; + auto DefLoc = MI->getDefinitionLoc(); // Also avoid storing predefined macros like __DBL_MIN__. if (SM.isWrittenInBuiltinFile(DefLoc))
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits