hokein updated this revision to Diff 244968. hokein added a comment. remove an accident change.
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D74610/new/ https://reviews.llvm.org/D74610 Files: clang-tools-extra/clangd/unittests/XRefsTests.cpp clang/lib/Index/IndexDecl.cpp clang/unittests/Index/IndexTests.cpp Index: clang/unittests/Index/IndexTests.cpp =================================================================== --- clang/unittests/Index/IndexTests.cpp +++ clang/unittests/Index/IndexTests.cpp @@ -319,6 +319,21 @@ WrittenAt(Position(4, 14))))); } +TEST(IndexTest, VisitDefaultArgs) { + std::string Code = R"cpp( + int var = 0; + void f(int s = var) {} + )cpp"; + auto Index = std::make_shared<Indexer>(); + IndexingOptions Opts; + Opts.IndexFunctionLocals = true; + Opts.IndexParametersInDeclarations = true; + tooling::runToolOnCode(std::make_unique<IndexAction>(Index, Opts), Code); + EXPECT_THAT(Index->Symbols, + Contains(AllOf(QName("var"), HasRole(SymbolRole::Reference), + WrittenAt(Position(3, 20))))); +} + } // namespace } // namespace index } // namespace clang Index: clang/lib/Index/IndexDecl.cpp =================================================================== --- clang/lib/Index/IndexDecl.cpp +++ clang/lib/Index/IndexDecl.cpp @@ -90,6 +90,12 @@ Parent->getLexicalDeclContext(), /*isBase=*/false, isIBType); IndexCtx.indexNestedNameSpecifierLoc(D->getQualifierLoc(), Parent); + auto IndexDefaultParmeterArgument = [&](const ParmVarDecl *Parm, + const NamedDecl *Parent) { + if (Parm->hasDefaultArg() && !Parm->hasUninstantiatedDefaultArg() && + !Parm->hasUnparsedDefaultArg()) + IndexCtx.indexBody(Parm->getDefaultArg(), Parent); + }; if (IndexCtx.shouldIndexFunctionLocalSymbols()) { if (const ParmVarDecl *Parm = dyn_cast<ParmVarDecl>(D)) { auto *DC = Parm->getDeclContext(); @@ -106,7 +112,8 @@ } else if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) { if (IndexCtx.shouldIndexParametersInDeclarations() || FD->isThisDeclarationADefinition()) { - for (auto PI : FD->parameters()) { + for (const auto *PI : FD->parameters()) { + IndexDefaultParmeterArgument(PI, D); IndexCtx.handleDecl(PI); } } @@ -116,9 +123,7 @@ if (const auto *FD = dyn_cast<FunctionDecl>(D)) { if (FD->isThisDeclarationADefinition()) { for (const auto *PV : FD->parameters()) { - if (PV->hasDefaultArg() && !PV->hasUninstantiatedDefaultArg() && - !PV->hasUnparsedDefaultArg()) - IndexCtx.indexBody(PV->getDefaultArg(), D); + IndexDefaultParmeterArgument(PV, D); } } } Index: clang-tools-extra/clangd/unittests/XRefsTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/XRefsTests.cpp +++ clang-tools-extra/clangd/unittests/XRefsTests.cpp @@ -943,6 +943,11 @@ int x = [[MACRO]]([[MACRO]](1)); } )cpp", + + R"cpp( + int [[v^ar]] = 0; + void foo(int s = [[var]]); + )cpp", }; for (const char *Test : Tests) { Annotations T(Test);
Index: clang/unittests/Index/IndexTests.cpp =================================================================== --- clang/unittests/Index/IndexTests.cpp +++ clang/unittests/Index/IndexTests.cpp @@ -319,6 +319,21 @@ WrittenAt(Position(4, 14))))); } +TEST(IndexTest, VisitDefaultArgs) { + std::string Code = R"cpp( + int var = 0; + void f(int s = var) {} + )cpp"; + auto Index = std::make_shared<Indexer>(); + IndexingOptions Opts; + Opts.IndexFunctionLocals = true; + Opts.IndexParametersInDeclarations = true; + tooling::runToolOnCode(std::make_unique<IndexAction>(Index, Opts), Code); + EXPECT_THAT(Index->Symbols, + Contains(AllOf(QName("var"), HasRole(SymbolRole::Reference), + WrittenAt(Position(3, 20))))); +} + } // namespace } // namespace index } // namespace clang Index: clang/lib/Index/IndexDecl.cpp =================================================================== --- clang/lib/Index/IndexDecl.cpp +++ clang/lib/Index/IndexDecl.cpp @@ -90,6 +90,12 @@ Parent->getLexicalDeclContext(), /*isBase=*/false, isIBType); IndexCtx.indexNestedNameSpecifierLoc(D->getQualifierLoc(), Parent); + auto IndexDefaultParmeterArgument = [&](const ParmVarDecl *Parm, + const NamedDecl *Parent) { + if (Parm->hasDefaultArg() && !Parm->hasUninstantiatedDefaultArg() && + !Parm->hasUnparsedDefaultArg()) + IndexCtx.indexBody(Parm->getDefaultArg(), Parent); + }; if (IndexCtx.shouldIndexFunctionLocalSymbols()) { if (const ParmVarDecl *Parm = dyn_cast<ParmVarDecl>(D)) { auto *DC = Parm->getDeclContext(); @@ -106,7 +112,8 @@ } else if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) { if (IndexCtx.shouldIndexParametersInDeclarations() || FD->isThisDeclarationADefinition()) { - for (auto PI : FD->parameters()) { + for (const auto *PI : FD->parameters()) { + IndexDefaultParmeterArgument(PI, D); IndexCtx.handleDecl(PI); } } @@ -116,9 +123,7 @@ if (const auto *FD = dyn_cast<FunctionDecl>(D)) { if (FD->isThisDeclarationADefinition()) { for (const auto *PV : FD->parameters()) { - if (PV->hasDefaultArg() && !PV->hasUninstantiatedDefaultArg() && - !PV->hasUnparsedDefaultArg()) - IndexCtx.indexBody(PV->getDefaultArg(), D); + IndexDefaultParmeterArgument(PV, D); } } } Index: clang-tools-extra/clangd/unittests/XRefsTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/XRefsTests.cpp +++ clang-tools-extra/clangd/unittests/XRefsTests.cpp @@ -943,6 +943,11 @@ int x = [[MACRO]]([[MACRO]](1)); } )cpp", + + R"cpp( + int [[v^ar]] = 0; + void foo(int s = [[var]]); + )cpp", }; for (const char *Test : Tests) { Annotations T(Test);
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits