Author: krasimir Date: Tue Apr 11 08:27:15 2017 New Revision: 299935 URL: http://llvm.org/viewvc/llvm-project?rev=299935&view=rev Log: [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 Modified: clang-tools-extra/trunk/clangd/ASTManager.cpp clang-tools-extra/trunk/clangd/Protocol.cpp clang-tools-extra/trunk/test/clangd/completion.test Modified: clang-tools-extra/trunk/clangd/ASTManager.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/ASTManager.cpp?rev=299935&r1=299934&r2=299935&view=diff ============================================================================== --- clang-tools-extra/trunk/clangd/ASTManager.cpp (original) +++ clang-tools-extra/trunk/clangd/ASTManager.cpp Tue Apr 11 08:27:15 2017 @@ -76,6 +76,49 @@ static int getSeverity(DiagnosticsEngine 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)); Modified: clang-tools-extra/trunk/clangd/Protocol.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/Protocol.cpp?rev=299935&r1=299934&r2=299935&view=diff ============================================================================== --- clang-tools-extra/trunk/clangd/Protocol.cpp (original) +++ clang-tools-extra/trunk/clangd/Protocol.cpp Tue Apr 11 08:27:15 2017 @@ -672,7 +672,7 @@ std::string CompletionItem::unparse(cons 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()) Modified: clang-tools-extra/trunk/test/clangd/completion.test URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/completion.test?rev=299935&r1=299934&r2=299935&view=diff ============================================================================== --- clang-tools-extra/trunk/test/clangd/completion.test (original) +++ clang-tools-extra/trunk/test/clangd/completion.test Tue Apr 11 08:27:15 2017 @@ -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 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits