diff options
author | Krasimir Georgiev <krasimir@google.com> | 2017-04-11 13:27:15 +0000 |
---|---|---|
committer | Krasimir Georgiev <krasimir@google.com> | 2017-04-11 13:27:15 +0000 |
commit | f7d501743e191fdd600e4291cfbb377fcf470513 (patch) | |
tree | c4024caea9116c6915f3128056f584c1b3187ad5 | |
parent | 01056042ef7967e983af7baad4f2017eb290031a (diff) | |
download | clang-tools-extra-f7d501743e191fdd600e4291cfbb377fcf470513.tar.gz |
[clangd] Implement item kind for completion results
Summary: The patch implements the conversion method from CXCursorKind to clangd::CompletionItemKind.
Contributed by stanionascu!
Reviewers: cfe-commits, bkramer, krasimir
Reviewed By: krasimir
Tags: #clang-tools-extra
Differential Revision: https://reviews.llvm.org/D31853
git-svn-id: https://llvm.org/svn/llvm-project/clang-tools-extra/trunk@299935 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | clangd/ASTManager.cpp | 47 | ||||
-rw-r--r-- | clangd/Protocol.cpp | 2 | ||||
-rw-r--r-- | test/clangd/completion.test | 6 |
3 files changed, 50 insertions, 5 deletions
diff --git a/clangd/ASTManager.cpp b/clangd/ASTManager.cpp index b85d0d82..04cbf582 100644 --- a/clangd/ASTManager.cpp +++ b/clangd/ASTManager.cpp @@ -76,6 +76,49 @@ static int getSeverity(DiagnosticsEngine::Level L) { llvm_unreachable("Unknown diagnostic level!"); } +static CompletionItemKind getKind(CXCursorKind K) { + switch (K) { + case CXCursor_MacroInstantiation: + case CXCursor_MacroDefinition: + return CompletionItemKind::Text; + case CXCursor_CXXMethod: + return CompletionItemKind::Method; + case CXCursor_FunctionDecl: + case CXCursor_FunctionTemplate: + return CompletionItemKind::Function; + case CXCursor_Constructor: + case CXCursor_Destructor: + return CompletionItemKind::Constructor; + case CXCursor_FieldDecl: + return CompletionItemKind::Field; + case CXCursor_VarDecl: + case CXCursor_ParmDecl: + return CompletionItemKind::Variable; + case CXCursor_ClassDecl: + case CXCursor_StructDecl: + case CXCursor_UnionDecl: + case CXCursor_ClassTemplate: + case CXCursor_ClassTemplatePartialSpecialization: + return CompletionItemKind::Class; + case CXCursor_Namespace: + case CXCursor_NamespaceAlias: + case CXCursor_NamespaceRef: + return CompletionItemKind::Module; + case CXCursor_EnumConstantDecl: + return CompletionItemKind::Value; + case CXCursor_EnumDecl: + return CompletionItemKind::Enum; + case CXCursor_TypeAliasDecl: + case CXCursor_TypeAliasTemplateDecl: + case CXCursor_TypedefDecl: + case CXCursor_MemberRef: + case CXCursor_TypeRef: + return CompletionItemKind::Reference; + default: + return CompletionItemKind::Missing; + } +} + ASTManager::ASTManager(JSONOutput &Output, DocumentStore &Store, bool RunSynchronously) : Output(Output), Store(Store), RunSynchronously(RunSynchronously), @@ -334,13 +377,15 @@ public: CodeCompletionResult *Results, unsigned NumResults) override { for (unsigned I = 0; I != NumResults; ++I) { - CodeCompletionString *CCS = Results[I].CreateCodeCompletionString( + CodeCompletionResult &Result = Results[I]; + CodeCompletionString *CCS = Result.CreateCodeCompletionString( S, Context, *Allocator, CCTUInfo, CodeCompleteOpts.IncludeBriefComments); if (CCS) { CompletionItem Item; assert(CCS->getTypedText()); Item.label = CCS->getTypedText(); + Item.kind = getKind(Result.CursorKind); if (CCS->getBriefComment()) Item.documentation = CCS->getBriefComment(); Items->push_back(std::move(Item)); diff --git a/clangd/Protocol.cpp b/clangd/Protocol.cpp index 6e3fadc0..5c5d3a27 100644 --- a/clangd/Protocol.cpp +++ b/clangd/Protocol.cpp @@ -672,7 +672,7 @@ std::string CompletionItem::unparse(const CompletionItem &CI) { assert(!CI.label.empty() && "completion item label is required"); Os << R"("label":")" << llvm::yaml::escape(CI.label) << R"(",)"; if (CI.kind != CompletionItemKind::Missing) - Os << R"("kind":)" << static_cast<int>(CI.kind) << R"(",)"; + Os << R"("kind":)" << static_cast<int>(CI.kind) << R"(,)"; if (!CI.detail.empty()) Os << R"("detail":")" << llvm::yaml::escape(CI.detail) << R"(",)"; if (!CI.documentation.empty()) diff --git a/test/clangd/completion.test b/test/clangd/completion.test index bf5e2ab8..3d004a3d 100644 --- a/test/clangd/completion.test +++ b/test/clangd/completion.test @@ -16,9 +16,9 @@ Content-Length: 148 # nondeterministic, so we check regardless of order.
#
# CHECK: {"jsonrpc":"2.0","id":1,"result":[
-# CHECK-DAG: {"label":"a"}
-# CHECK-DAG: {"label":"bb"}
-# CHECK-DAG: {"label":"ccc"}
+# CHECK-DAG: {"label":"a","kind":5}
+# CHECK-DAG: {"label":"bb","kind":5}
+# CHECK-DAG: {"label":"ccc","kind":5}
# CHECK: ]}
Content-Length: 44
|