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
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits