aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/languageclient
diff options
context:
space:
mode:
authorDavid Schulz <david.schulz@qt.io>2019-03-15 14:53:36 +0100
committerDavid Schulz <david.schulz@qt.io>2019-04-02 07:57:23 +0000
commitffcf226a7850a902e125ecbef75c257a7817243d (patch)
treec699908f1130cff008dbeef4067dd7d9b9a435ae /src/plugins/languageclient
parent35baa3e89d445f287e199a17da106c7701a2909c (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.cpp70
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){