diff --git a/clang-tools-extra/clangd/CodeComplete.cpp b/clang-tools-extra/clangd/CodeComplete.cpp --- a/clang-tools-extra/clangd/CodeComplete.cpp +++ b/clang-tools-extra/clangd/CodeComplete.cpp @@ -670,8 +670,12 @@ for (auto *Context : CCContext.getVisitedContexts()) { if (isa(Context)) Scopes.AccessibleScopes.push_back(""); // global namespace - else if (isa(Context)) - Scopes.AccessibleScopes.push_back(printNamespaceScope(*Context)); + else if (const auto *ND = dyn_cast(Context)) { + if (ND->isInlineNamespace()) + Scopes.AccessibleScopes.push_back(printQualifiedName(*ND) + "::"); + else + Scopes.AccessibleScopes.push_back(printNamespaceScope(*ND)); + } } const CXXScopeSpec *SemaSpecifier = diff --git a/clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp b/clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp --- a/clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp +++ b/clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp @@ -1700,9 +1700,11 @@ namespace ns1 {} namespace ns2 {} // ignore namespace ns3 { namespace nns3 {} } + namespace ns4 { inline namespace ns4_inline {} } namespace foo { using namespace ns1; using namespace ns3::nns3; + using namespace ns4::ns4_inline; } namespace ns { void f() { @@ -1711,10 +1713,11 @@ } )cpp"); - EXPECT_THAT(Requests, - ElementsAre(Field( - &FuzzyFindRequest::Scopes, - UnorderedElementsAre("foo::", "ns1::", "ns3::nns3::")))); + EXPECT_THAT( + Requests, + ElementsAre(Field(&FuzzyFindRequest::Scopes, + UnorderedElementsAre("foo::", "ns1::", "ns3::nns3::", + "ns4::ns4_inline::")))); } TEST(CompletionTest, UnresolvedQualifierIdQuery) {