diff options
author | Sam McCall <sam.mccall@gmail.com> | 2019-05-06 12:03:26 +0000 |
---|---|---|
committer | Sam McCall <sam.mccall@gmail.com> | 2019-05-06 12:03:26 +0000 |
commit | 0eb1ac6d1df856f065717226ef34d00679a211fe (patch) | |
tree | d12279f80b5729d0324f066002c838baa736fbd2 | |
parent | 29d7f251c7891d44eef37210804ed0cebeddd499 (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.cpp | 1 | ||||
-rw-r--r-- | clangd/CodeComplete.h | 3 | ||||
-rw-r--r-- | clangd/unittests/CodeCompleteTests.cpp | 3 |
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"))); |