summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/unittests/clangd/CodeCompleteTests.cpp
diff options
context:
space:
mode:
authorEric Liu <ioeric@google.com>2019-02-27 11:42:37 +0000
committerEric Liu <ioeric@google.com>2019-02-27 11:42:37 +0000
commite98b86cbe88a67c55da3d8347d817e56ed5e455b (patch)
treef6ada77986c79ec922520aab8d3b049cc4cd0eda /clang-tools-extra/unittests/clangd/CodeCompleteTests.cpp
parent79fb85805383f19a021af3d8b1b6f5754db2a370 (diff)
downloadbcm5719-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.cpp35
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
OpenPOWER on IntegriCloud