diff options
author | David Schulz <david.schulz@qt.io> | 2019-03-15 14:53:36 +0100 |
---|---|---|
committer | David Schulz <david.schulz@qt.io> | 2019-04-02 07:57:23 +0000 |
commit | ffcf226a7850a902e125ecbef75c257a7817243d (patch) | |
tree | c699908f1130cff008dbeef4067dd7d9b9a435ae /src/plugins/languageclient | |
parent | 35baa3e89d445f287e199a17da106c7701a2909c (diff) |
LSP: generate capabilities in a central place
Also remove the creator default capabilities from the default
constructor of the general client capabilities in Utils.
Change-Id: Ifdaaf1bfb5047197e37ba84773552648132df3e8
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Diffstat (limited to 'src/plugins/languageclient')
-rw-r--r-- | src/plugins/languageclient/client.cpp | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/src/plugins/languageclient/client.cpp b/src/plugins/languageclient/client.cpp index c0cbcb7254..d3f4091ff7 100644 --- a/src/plugins/languageclient/client.cpp +++ b/src/plugins/languageclient/client.cpp @@ -122,6 +122,75 @@ Client::~Client() removeDiagnostics(uri); } +static ClientCapabilities generateClientCapabilities() +{ + ClientCapabilities capabilities; + WorkspaceClientCapabilities workspaceCapabilities; + workspaceCapabilities.setWorkspaceFolders(true); + workspaceCapabilities.setApplyEdit(true); + DynamicRegistrationCapabilities allowDynamicRegistration; + allowDynamicRegistration.setDynamicRegistration(true); + workspaceCapabilities.setDidChangeConfiguration(allowDynamicRegistration); + workspaceCapabilities.setExecuteCommand(allowDynamicRegistration); + capabilities.setWorkspace(workspaceCapabilities); + + TextDocumentClientCapabilities documentCapabilities; + TextDocumentClientCapabilities::SynchronizationCapabilities syncCapabilities; + syncCapabilities.setDynamicRegistration(true); + syncCapabilities.setWillSave(true); + syncCapabilities.setWillSaveWaitUntil(false); + syncCapabilities.setDidSave(true); + documentCapabilities.setSynchronization(syncCapabilities); + + SymbolCapabilities symbolCapabilities; + SymbolCapabilities::SymbolKindCapabilities symbolKindCapabilities; + symbolKindCapabilities.setValueSet( + {SymbolKind::File, SymbolKind::Module, SymbolKind::Namespace, + SymbolKind::Package, SymbolKind::Class, SymbolKind::Method, + SymbolKind::Property, SymbolKind::Field, SymbolKind::Constructor, + SymbolKind::Enum, SymbolKind::Interface, SymbolKind::Function, + SymbolKind::Variable, SymbolKind::Constant, SymbolKind::String, + SymbolKind::Number, SymbolKind::Boolean, SymbolKind::Array, + SymbolKind::Object, SymbolKind::Key, SymbolKind::Null, + SymbolKind::EnumMember, SymbolKind::Struct, SymbolKind::Event, + SymbolKind::Operator, SymbolKind::TypeParameter}); + symbolCapabilities.setSymbolKind(symbolKindCapabilities); + documentCapabilities.setDocumentSymbol(symbolCapabilities); + + TextDocumentClientCapabilities::CompletionCapabilities completionCapabilities; + completionCapabilities.setDynamicRegistration(true); + TextDocumentClientCapabilities::CompletionCapabilities::CompletionItemKindCapabilities + completionItemKindCapabilities; + completionItemKindCapabilities.setValueSet( + {CompletionItemKind::Text, CompletionItemKind::Method, + CompletionItemKind::Function, CompletionItemKind::Constructor, + CompletionItemKind::Field, CompletionItemKind::Variable, + CompletionItemKind::Class, CompletionItemKind::Interface, + CompletionItemKind::Module, CompletionItemKind::Property, + CompletionItemKind::Unit, CompletionItemKind::Value, + CompletionItemKind::Enum, CompletionItemKind::Keyword, + CompletionItemKind::Snippet, CompletionItemKind::Color, + CompletionItemKind::File, CompletionItemKind::Reference, + CompletionItemKind::Folder, CompletionItemKind::EnumMember, + CompletionItemKind::Constant, CompletionItemKind::Struct, + CompletionItemKind::Event, CompletionItemKind::Operator, + CompletionItemKind::TypeParameter}); + + completionCapabilities.setCompletionItemKind(completionItemKindCapabilities); + documentCapabilities.setCompletion(completionCapabilities); + + TextDocumentClientCapabilities::CodeActionCapabilities codeActionCapabilities; + TextDocumentClientCapabilities::CodeActionCapabilities::CodeActionLiteralSupport literalSupport; + literalSupport.setCodeActionKind( + TextDocumentClientCapabilities::CodeActionCapabilities::CodeActionLiteralSupport:: + CodeActionKind(QList<QString>{"*"})); + codeActionCapabilities.setCodeActionLiteralSupport(literalSupport); + documentCapabilities.setCodeAction(codeActionCapabilities); + capabilities.setTextDocument(documentCapabilities); + + return capabilities; +} + void Client::initialize() { using namespace ProjectExplorer; @@ -131,6 +200,7 @@ void Client::initialize() auto initRequest = new InitializeRequest(); if (auto startupProject = SessionManager::startupProject()) { auto params = initRequest->params().value_or(InitializeParams()); + params.setCapabilities(generateClientCapabilities()); params.setRootUri(DocumentUri::fromFileName(startupProject->projectDirectory())); initRequest->setParams(params); params.setWorkSpaceFolders(Utils::transform(SessionManager::projects(), [](Project *pro){ |