diff options
| author | Eric Liu <ioeric@google.com> | 2019-02-27 11:42:37 +0000 |
|---|---|---|
| committer | Eric Liu <ioeric@google.com> | 2019-02-27 11:42:37 +0000 |
| commit | e98b86cbe88a67c55da3d8347d817e56ed5e455b (patch) | |
| tree | f6ada77986c79ec922520aab8d3b049cc4cd0eda /clang-tools-extra/unittests/clangd/CodeCompleteTests.cpp | |
| parent | 79fb85805383f19a021af3d8b1b6f5754db2a370 (diff) | |
| download | bcm5719-llvm-e98b86cbe88a67c55da3d8347d817e56ed5e455b.tar.gz bcm5719-llvm-e98b86cbe88a67c55da3d8347d817e56ed5e455b.zip | |
[clangd] Improve global code completion when scope specifier is unresolved.
Summary:
Suppose `clangd::` is unresolved in the following example. Currently,
we simply use "clangd::" as the query scope. We can do better by combining with
accessible scopes in the context. The query scopes can be `{clangd::, clang::clangd::}`.
```
namespace clang { clangd::^ }
```
Reviewers: ilya-biryukov, sammccall, hokein, kadircet
Reviewed By: kadircet
Subscribers: MaskRay, jkorous, arphaman, kadircet, jdoerfert, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D58448
llvm-svn: 354963
Diffstat (limited to 'clang-tools-extra/unittests/clangd/CodeCompleteTests.cpp')
| -rw-r--r-- | clang-tools-extra/unittests/clangd/CodeCompleteTests.cpp | 35 |
1 files changed, 33 insertions, 2 deletions
diff --git a/clang-tools-extra/unittests/clangd/CodeCompleteTests.cpp b/clang-tools-extra/unittests/clangd/CodeCompleteTests.cpp index df7c8ef19d6..16d8efcf810 100644 --- a/clang-tools-extra/unittests/clangd/CodeCompleteTests.cpp +++ b/clang-tools-extra/unittests/clangd/CodeCompleteTests.cpp @@ -1095,8 +1095,10 @@ TEST(CompletionTest, UnresolvedQualifierIdQuery) { } // namespace ns )cpp"); - EXPECT_THAT(Requests, ElementsAre(Field(&FuzzyFindRequest::Scopes, - UnorderedElementsAre("bar::")))); + EXPECT_THAT(Requests, + ElementsAre(Field( + &FuzzyFindRequest::Scopes, + UnorderedElementsAre("a::bar::", "ns::bar::", "bar::")))); } TEST(CompletionTest, UnresolvedNestedQualifierIdQuery) { @@ -2335,6 +2337,35 @@ TEST(CompletionTest, UsingDecl) { Kind(CompletionItemKind::Reference)))); } +TEST(CompletionTest, ScopeIsUnresolved) { + clangd::CodeCompleteOptions Opts = {}; + Opts.AllScopes = true; + + auto Results = completions(R"cpp( + namespace a { + void f() { b::X^ } + } + )cpp", + {cls("a::b::XYZ")}, Opts); + EXPECT_THAT(Results.Completions, + UnorderedElementsAre(AllOf(Qualifier(""), Named("XYZ")))); +} + +TEST(CompletionTest, NestedScopeIsUnresolved) { + clangd::CodeCompleteOptions Opts = {}; + Opts.AllScopes = true; + + auto Results = completions(R"cpp( + namespace a { + namespace b {} + void f() { b::c::X^ } + } + )cpp", + {cls("a::b::c::XYZ")}, Opts); + EXPECT_THAT(Results.Completions, + UnorderedElementsAre(AllOf(Qualifier(""), Named("XYZ")))); +} + } // namespace } // namespace clangd } // namespace clang |

