summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/clangd/ClangdLSPServer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang-tools-extra/clangd/ClangdLSPServer.cpp')
-rw-r--r--clang-tools-extra/clangd/ClangdLSPServer.cpp26
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)) {}
OpenPOWER on IntegriCloud