Author: ibiryukov Date: Sun Oct 22 23:06:21 2017 New Revision: 316311 URL: http://llvm.org/viewvc/llvm-project?rev=316311&view=rev Log: [clangd] Report proper kinds for 'Keyword' and 'Snippet' completion items.
Reviewers: rwols, malaperle, krasimir, bkramer, sammccall Reviewed By: rwols, sammccall Subscribers: klimek, cfe-commits Differential Revision: https://reviews.llvm.org/D38720 Added: clang-tools-extra/trunk/test/clangd/completion-items-kinds.test Modified: clang-tools-extra/trunk/clangd/ClangdUnit.cpp Modified: clang-tools-extra/trunk/clangd/ClangdUnit.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/ClangdUnit.cpp?rev=316311&r1=316310&r2=316311&view=diff ============================================================================== --- clang-tools-extra/trunk/clangd/ClangdUnit.cpp (original) +++ clang-tools-extra/trunk/clangd/ClangdUnit.cpp Sun Oct 22 23:06:21 2017 @@ -268,8 +268,8 @@ template <class T> bool futureIsReady(st namespace { -CompletionItemKind getKind(CXCursorKind K) { - switch (K) { +CompletionItemKind getKindOfDecl(CXCursorKind CursorKind) { + switch (CursorKind) { case CXCursor_MacroInstantiation: case CXCursor_MacroDefinition: return CompletionItemKind::Text; @@ -311,6 +311,22 @@ CompletionItemKind getKind(CXCursorKind } } +CompletionItemKind getKind(CodeCompletionResult::ResultKind ResKind, + CXCursorKind CursorKind) { + switch (ResKind) { + case CodeCompletionResult::RK_Declaration: + return getKindOfDecl(CursorKind); + case CodeCompletionResult::RK_Keyword: + return CompletionItemKind::Keyword; + case CodeCompletionResult::RK_Macro: + return CompletionItemKind::Text; // unfortunately, there's no 'Macro' + // completion items in LSP. + case CodeCompletionResult::RK_Pattern: + return CompletionItemKind::Snippet; + } + llvm_unreachable("Unhandled CodeCompletionResult::ResultKind."); +} + std::string escapeSnippet(const llvm::StringRef Text) { std::string Result; Result.reserve(Text.size()); // Assume '$', '}' and '\\' are rare. @@ -395,7 +411,7 @@ private: ProcessChunks(CCS, Item); // Fill in the kind field of the CompletionItem. - Item.kind = getKind(Result.CursorKind); + Item.kind = getKind(Result.Kind, Result.CursorKind); FillSortText(CCS, Item); Added: clang-tools-extra/trunk/test/clangd/completion-items-kinds.test URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/completion-items-kinds.test?rev=316311&view=auto ============================================================================== --- clang-tools-extra/trunk/test/clangd/completion-items-kinds.test (added) +++ clang-tools-extra/trunk/test/clangd/completion-items-kinds.test Sun Oct 22 23:06:21 2017 @@ -0,0 +1,37 @@ +# RUN: clangd -enable-snippets -run-synchronously < %s | FileCheck %s +# It is absolutely vital that this file has CRLF line endings. +# +Content-Length: 125 + +{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootPath":"clangd","capabilities":{},"trace":"off"}} +Content-Length: 220 + +{"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"uri":"file:///main.cpp","languageId":"cpp","version":1,"text":"#define MACRO X\nint variable;\nstruct Struct {};\n int function();\nint X = "}}} +Content-Length: 148 + +{"jsonrpc":"2.0","id":1,"method":"textDocument/completion","params":{"textDocument":{"uri":"file:///main.cpp"},"position":{"line":4,"character":7}}} +Content-Length: 58 +# CHECK: {"jsonrpc":"2.0","id":1,"result":[ +# +# Keyword +# CHECK-DAG: {"label":"int","kind":14,"sortText":"000050int","filterText":"int","insertText":"int","insertTextFormat":1} +# +# Code pattern +# CHECK-DAG: {"label":"static_cast<type>(expression)","kind":15,"sortText":"000040static_cast","filterText":"static_cast","insertText":"static_cast<${1:type}>(${2:expression})","insertTextFormat":2} +# +# Struct +# CHECK-DAG: {"label":"Struct","kind":7,"sortText":"000050Struct","filterText":"Struct","insertText":"Struct","insertTextFormat":1} +# +# Macro +# CHECK-DAG: {"label":"MACRO","kind":1,"sortText":"000070MACRO","filterText":"MACRO","insertText":"MACRO","insertTextFormat":1} +# +# Variable +# CHECK-DAG: {"label":"variable","kind":6,"detail":"int","sortText":"000012variable","filterText":"variable","insertText":"variable","insertTextFormat":1} +# +# Function +# CHECK-DAG: {"label":"function()","kind":3,"detail":"int","sortText":"000012function","filterText":"function","insertText":"function()","insertTextFormat":1} +# +# +# CHECK: ]} + +{"jsonrpc":"2.0","id":3,"method":"shutdown","params":null} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits