ilya-golovenko updated this revision to Diff 281542. ilya-golovenko added a comment.
Trigger new build Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D84839/new/ https://reviews.llvm.org/D84839 Files: clang-tools-extra/clangd/FindSymbols.cpp clang-tools-extra/clangd/unittests/FindSymbolsTests.cpp Index: clang-tools-extra/clangd/unittests/FindSymbolsTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/FindSymbolsTests.cpp +++ clang-tools-extra/clangd/unittests/FindSymbolsTests.cpp @@ -429,6 +429,26 @@ EXPECT_THAT(getSymbols(TU.build()), IsEmpty()); } +TEST(DocumentSymbols, ExternContext) { + TestTU TU; + TU.Code = R"cpp( + extern "C" { + void foo(); + class Foo {}; + } + namespace ns { + extern "C" { + void bar(); + class Bar {}; + } + })cpp"; + + EXPECT_THAT(getSymbols(TU.build()), + ElementsAre(WithName("foo"), WithName("Foo"), + AllOf(WithName("ns"), + Children(WithName("bar"), WithName("Bar"))))); +} + TEST(DocumentSymbols, NoLocals) { TestTU TU; TU.Code = R"cpp( Index: clang-tools-extra/clangd/FindSymbols.cpp =================================================================== --- clang-tools-extra/clangd/FindSymbols.cpp +++ clang-tools-extra/clangd/FindSymbols.cpp @@ -197,8 +197,11 @@ D = TD; } auto *ND = llvm::dyn_cast<NamedDecl>(D); - if (!ND) + if (!ND) { + // Traverse children of unnamed contexts, e.g. extern "C". + traverseChildren(D, Results); return; + } VisitKind Visit = shouldVisit(ND); if (Visit == VisitKind::No) return;
Index: clang-tools-extra/clangd/unittests/FindSymbolsTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/FindSymbolsTests.cpp +++ clang-tools-extra/clangd/unittests/FindSymbolsTests.cpp @@ -429,6 +429,26 @@ EXPECT_THAT(getSymbols(TU.build()), IsEmpty()); } +TEST(DocumentSymbols, ExternContext) { + TestTU TU; + TU.Code = R"cpp( + extern "C" { + void foo(); + class Foo {}; + } + namespace ns { + extern "C" { + void bar(); + class Bar {}; + } + })cpp"; + + EXPECT_THAT(getSymbols(TU.build()), + ElementsAre(WithName("foo"), WithName("Foo"), + AllOf(WithName("ns"), + Children(WithName("bar"), WithName("Bar"))))); +} + TEST(DocumentSymbols, NoLocals) { TestTU TU; TU.Code = R"cpp( Index: clang-tools-extra/clangd/FindSymbols.cpp =================================================================== --- clang-tools-extra/clangd/FindSymbols.cpp +++ clang-tools-extra/clangd/FindSymbols.cpp @@ -197,8 +197,11 @@ D = TD; } auto *ND = llvm::dyn_cast<NamedDecl>(D); - if (!ND) + if (!ND) { + // Traverse children of unnamed contexts, e.g. extern "C". + traverseChildren(D, Results); return; + } VisitKind Visit = shouldVisit(ND); if (Visit == VisitKind::No) return;
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits