diff options
| author | Kadir Cetinkaya <kadircet@google.com> | 2018-09-27 17:13:07 +0000 |
|---|---|---|
| committer | Kadir Cetinkaya <kadircet@google.com> | 2018-09-27 17:13:07 +0000 |
| commit | 133d46f9a7c5dcbcda72fa09202d1d6cf0b7f79b (patch) | |
| tree | cbff7ecc30293d407ddbd0347c99eec215c739db /clang-tools-extra/clangd/ClangdLSPServer.cpp | |
| parent | 66217a3bad8cdad4598b2a111be6db462238238f (diff) | |
| download | bcm5719-llvm-133d46f9a7c5dcbcda72fa09202d1d6cf0b7f79b.tar.gz bcm5719-llvm-133d46f9a7c5dcbcda72fa09202d1d6cf0b7f79b.zip | |
Introduce completionItemKind capability support.
Reviewers: sammccall
Reviewed By: sammccall
Subscribers: ilya-biryukov, ioeric, jkorous, arphaman, cfe-commits
Differential Revision: https://reviews.llvm.org/D52616
llvm-svn: 343237
Diffstat (limited to 'clang-tools-extra/clangd/ClangdLSPServer.cpp')
| -rw-r--r-- | clang-tools-extra/clangd/ClangdLSPServer.cpp | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/clang-tools-extra/clangd/ClangdLSPServer.cpp b/clang-tools-extra/clangd/ClangdLSPServer.cpp index a4ebf575d31..c6ce3ef9bf9 100644 --- a/clang-tools-extra/clangd/ClangdLSPServer.cpp +++ b/clang-tools-extra/clangd/ClangdLSPServer.cpp @@ -70,6 +70,14 @@ SymbolKindBitset defaultSymbolKinds() { return Defaults; } +CompletionItemKindBitset defaultCompletionItemKinds() { + CompletionItemKindBitset Defaults; + for (size_t I = CompletionItemKindMin; + I <= static_cast<size_t>(CompletionItemKind::Reference); ++I) + Defaults.set(I); + return Defaults; +} + } // namespace void ClangdLSPServer::onInitialize(InitializeParams &Params) { @@ -89,13 +97,20 @@ void ClangdLSPServer::onInitialize(InitializeParams &Params) { Params.capabilities.textDocument.publishDiagnostics.categorySupport; if (Params.capabilities.workspace && Params.capabilities.workspace->symbol && - Params.capabilities.workspace->symbol->symbolKind) { + Params.capabilities.workspace->symbol->symbolKind && + Params.capabilities.workspace->symbol->symbolKind->valueSet) { for (SymbolKind Kind : *Params.capabilities.workspace->symbol->symbolKind->valueSet) { SupportedSymbolKinds.set(static_cast<size_t>(Kind)); } } + if (Params.capabilities.textDocument.completion.completionItemKind && + Params.capabilities.textDocument.completion.completionItemKind->valueSet) + for (CompletionItemKind Kind : *Params.capabilities.textDocument.completion + .completionItemKind->valueSet) + SupportedCompletionItemKinds.set(static_cast<size_t>(Kind)); + reply(json::Object{ {{"capabilities", json::Object{ @@ -347,8 +362,12 @@ void ClangdLSPServer::onCompletion(TextDocumentPositionParams &Params) { return replyError(List.takeError()); CompletionList LSPList; LSPList.isIncomplete = List->HasMore; - for (const auto &R : List->Completions) - LSPList.items.push_back(R.render(CCOpts)); + for (const auto &R : List->Completions) { + CompletionItem C = R.render(CCOpts); + C.kind = adjustKindToCapability( + C.kind, SupportedCompletionItemKinds); + LSPList.items.push_back(std::move(C)); + } return reply(std::move(LSPList)); }); } @@ -459,6 +478,7 @@ ClangdLSPServer::ClangdLSPServer(JSONOutput &Out, : CompilationDB::makeDirectoryBased( std::move(CompileCommandsDir))), CCOpts(CCOpts), SupportedSymbolKinds(defaultSymbolKinds()), + SupportedCompletionItemKinds(defaultCompletionItemKinds()), Server(new ClangdServer(CDB.getCDB(), FSProvider, /*DiagConsumer=*/*this, Opts)) {} |

