summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSam McCall <sam.mccall@gmail.com>2019-05-06 12:03:26 +0000
committerSam McCall <sam.mccall@gmail.com>2019-05-06 12:03:26 +0000
commit0eb1ac6d1df856f065717226ef34d00679a211fe (patch)
treed12279f80b5729d0324f066002c838baa736fbd2
parent29d7f251c7891d44eef37210804ed0cebeddd499 (diff)
[clangd] Expose whether no-compile completion was used.
Summary: Embedding clients want to experiment with showing such results in e.g. a different color. Reviewers: kadircet Subscribers: ilya-biryukov, MaskRay, jkorous, arphaman, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D61588 git-svn-id: https://llvm.org/svn/llvm-project/clang-tools-extra/trunk@360039 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--clangd/CodeComplete.cpp1
-rw-r--r--clangd/CodeComplete.h3
-rw-r--r--clangd/unittests/CodeCompleteTests.cpp3
3 files changed, 7 insertions, 0 deletions
diff --git a/clangd/CodeComplete.cpp b/clangd/CodeComplete.cpp
index 22f75cc0..4789a809 100644
--- a/clangd/CodeComplete.cpp
+++ b/clangd/CodeComplete.cpp
@@ -1380,6 +1380,7 @@ public:
CodeCompleteResult Output = toCodeCompleteResult(mergeResults(
/*SemaResults=*/{}, IndexResults, IdentifierResults));
+ Output.RanParser = false;
logResults(Output, Tracer);
return Output;
}
diff --git a/clangd/CodeComplete.h b/clangd/CodeComplete.h
index 9d43107a..2dc7f22c 100644
--- a/clangd/CodeComplete.h
+++ b/clangd/CodeComplete.h
@@ -207,6 +207,9 @@ struct CodeCompleteResult {
std::vector<CodeCompletion> Completions;
bool HasMore = false;
CodeCompletionContext::Kind Context = CodeCompletionContext::CCC_Other;
+ // Usually the source will be parsed with a real C++ parser.
+ // But heuristics may be used instead if e.g. the preamble is not ready.
+ bool RanParser = true;
};
raw_ostream &operator<<(raw_ostream &, const CodeCompleteResult &);
diff --git a/clangd/unittests/CodeCompleteTests.cpp b/clangd/unittests/CodeCompleteTests.cpp
index 509b35e9..e584597e 100644
--- a/clangd/unittests/CodeCompleteTests.cpp
+++ b/clangd/unittests/CodeCompleteTests.cpp
@@ -235,6 +235,7 @@ void TestAfterDotCompletion(clangd::CodeCompleteOptions Opts) {
)cpp",
{cls("IndexClass"), var("index_var"), func("index_func")}, Opts);
+ EXPECT_TRUE(Results.RanParser);
// Class members. The only items that must be present in after-dot
// completion.
EXPECT_THAT(Results.Completions,
@@ -284,6 +285,7 @@ void TestGlobalScopeCompletion(clangd::CodeCompleteOptions Opts) {
)cpp",
{cls("IndexClass"), var("index_var"), func("index_func")}, Opts);
+ EXPECT_TRUE(Results.RanParser);
// Class members. Should never be present in global completions.
EXPECT_THAT(Results.Completions,
Not(AnyOf(Has("method"), Has("method()"), Has("field"))));
@@ -2459,6 +2461,7 @@ TEST(NoCompileCompletionTest, Basic) {
^
}
)cpp");
+ EXPECT_FALSE(Results.RanParser);
EXPECT_THAT(Results.Completions,
UnorderedElementsAre(Named("void"), Named("func"), Named("int"),
Named("xyz"), Named("abc")));