From 60ec08f0678f172b3bd08b4a7a82eccb3a950cfe Mon Sep 17 00:00:00 2001 From: Kadir Cetinkaya Date: Tue, 26 Feb 2019 14:23:47 +0000 Subject: [PATCH] [clangd] Index UsingDecls Summary: D58340 enables indexing of USRs, this makes sure test in clangd are aligned with the change Reviewers: hokein Subscribers: ilya-biryukov, ioeric, MaskRay, jkorous, arphaman, jdoerfert, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D58341 llvm-svn: 354879 --- .../unittests/clangd/CodeCompleteTests.cpp | 21 +++++++++++++++++++++ .../unittests/clangd/FindSymbolsTests.cpp | 5 +---- .../unittests/clangd/SymbolCollectorTests.cpp | 14 +++++++++++--- .../unittests/clangd/SymbolInfoTests.cpp | 3 ++- 4 files changed, 35 insertions(+), 8 deletions(-) diff --git a/clang-tools-extra/unittests/clangd/CodeCompleteTests.cpp b/clang-tools-extra/unittests/clangd/CodeCompleteTests.cpp index 3a0082a..df7c8ef 100644 --- a/clang-tools-extra/unittests/clangd/CodeCompleteTests.cpp +++ b/clang-tools-extra/unittests/clangd/CodeCompleteTests.cpp @@ -17,6 +17,7 @@ #include "SyncAPI.h" #include "TestFS.h" #include "TestIndex.h" +#include "TestTU.h" #include "index/MemIndex.h" #include "clang/Sema/CodeCompleteConsumer.h" #include "llvm/Support/Error.h" @@ -2314,6 +2315,26 @@ TEST(CompletionTest, WorksWithNullType) { EXPECT_THAT(R.Completions, ElementsAre(Named("loopVar"))); } +TEST(CompletionTest, UsingDecl) { + const char *Header(R"cpp( + void foo(int); + namespace std { + using ::foo; + })cpp"); + const char *Source(R"cpp( + void bar() { + std::^; + })cpp"); + auto Index = TestTU::withHeaderCode(Header).index(); + clangd::CodeCompleteOptions Opts; + Opts.Index = Index.get(); + Opts.AllScopes = true; + auto R = completions(Source, {}, Opts); + EXPECT_THAT(R.Completions, + ElementsAre(AllOf(Scope("std::"), Named("foo"), + Kind(CompletionItemKind::Reference)))); +} + } // namespace } // namespace clangd } // namespace clang diff --git a/clang-tools-extra/unittests/clangd/FindSymbolsTests.cpp b/clang-tools-extra/unittests/clangd/FindSymbolsTests.cpp index 78447f3..05fa42e 100644 --- a/clang-tools-extra/unittests/clangd/FindSymbolsTests.cpp +++ b/clang-tools-extra/unittests/clangd/FindSymbolsTests.cpp @@ -368,9 +368,6 @@ TEST_F(DocumentSymbolsTest, BasicSymbols) { // 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 )"); @@ -415,7 +412,7 @@ TEST_F(DocumentSymbolsTest, BasicSymbols) { Children()))), AllOf(WithName("baz"), WithKind(SymbolKind::Namespace), Children()), - AllOf(WithName("v2"), WithKind(SymbolKind::Variable))))})); + AllOf(WithName("v2"), WithKind(SymbolKind::Namespace))))})); } TEST_F(DocumentSymbolsTest, DeclarationDefinition) { diff --git a/clang-tools-extra/unittests/clangd/SymbolCollectorTests.cpp b/clang-tools-extra/unittests/clangd/SymbolCollectorTests.cpp index a9e1f2e..d795286 100644 --- a/clang-tools-extra/unittests/clangd/SymbolCollectorTests.cpp +++ b/clang-tools-extra/unittests/clangd/SymbolCollectorTests.cpp @@ -331,9 +331,6 @@ TEST_F(SymbolCollectorTest, CollectSymbols) { // 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 )"; @@ -360,6 +357,7 @@ TEST_F(SymbolCollectorTest, CollectSymbols) { 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))})); } @@ -1149,6 +1147,16 @@ TEST_F(SymbolCollectorTest, ImplementationDetail) { AllOf(QName("Public"), Not(ImplementationDetail())))); } +TEST_F(SymbolCollectorTest, UsingDecl) { + const char *Header = R"( + void foo(); + namespace std { + using ::foo; + })"; + runSymbolCollector(Header, /**/ ""); + EXPECT_THAT(Symbols, Contains(QName("std::foo"))); +} + } // namespace } // namespace clangd } // namespace clang diff --git a/clang-tools-extra/unittests/clangd/SymbolInfoTests.cpp b/clang-tools-extra/unittests/clangd/SymbolInfoTests.cpp index 4a7e414..e0a9ecd 100644 --- a/clang-tools-extra/unittests/clangd/SymbolInfoTests.cpp +++ b/clang-tools-extra/unittests/clangd/SymbolInfoTests.cpp @@ -167,7 +167,8 @@ TEST(SymbolInfoTests, All) { )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 {}; -- 2.7.4