Index: unittests/clangd/SymbolCollectorTests.cpp =================================================================== --- unittests/clangd/SymbolCollectorTests.cpp +++ unittests/clangd/SymbolCollectorTests.cpp @@ -325,9 +325,6 @@ // Namespace alias namespace baz = bar; - // FIXME: using declaration is not supported as the IndexAction will ignore - // implicit declarations (the implicit using shadow declaration) by default, - // and there is no way to customize this behavior at the moment. using bar::v2; } // namespace foo )"; @@ -354,6 +351,7 @@ AllOf(QName("foo::int32_t"), ForCodeCompletion(true)), AllOf(QName("foo::v1"), ForCodeCompletion(true)), AllOf(QName("foo::bar::v2"), ForCodeCompletion(true)), + AllOf(QName("foo::v2"), ForCodeCompletion(true)), AllOf(QName("foo::baz"), ForCodeCompletion(true))})); } @@ -1118,6 +1116,17 @@ AllOf(QName("Public"), Not(ImplementationDetail())))); } +TEST_F(SymbolCollectorTest, UsingDecl) { + const std::string Header = R"( + void foo(); + namespace std { + using ::foo; + } + )"; + runSymbolCollector(Header, /**/ ""); + EXPECT_THAT(Symbols, Contains(QName("std::foo"))); +} + } // namespace } // namespace clangd } // namespace clang Index: unittests/clangd/SymbolInfoTests.cpp =================================================================== --- unittests/clangd/SymbolInfoTests.cpp +++ unittests/clangd/SymbolInfoTests.cpp @@ -167,7 +167,8 @@ )cpp", {CreateExpectedSymbolDetails("foo", "", "c:@F@foo#"), CreateExpectedSymbolDetails("foo", "", "c:@F@foo#b#"), - CreateExpectedSymbolDetails("foo", "", "c:@F@foo#I#")}}, + CreateExpectedSymbolDetails("foo", "", "c:@F@foo#I#"), + CreateExpectedSymbolDetails("foo", "bar::", "c:@N@bar@UD@foo")}}, { R"cpp( // Multiple symbols returned - implicit conversion struct foo {};