forked from qt-creator/qt-creator
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>
This commit is contained in:
@@ -27,19 +27,6 @@
|
||||
|
||||
namespace LanguageServerProtocol {
|
||||
|
||||
SymbolCapabilities::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});
|
||||
}
|
||||
|
||||
Utils::optional<QList<SymbolKind> > SymbolCapabilities::SymbolKindCapabilities::valueSet() const
|
||||
{
|
||||
Utils::optional<QList<int>> array = optionalArray<int>(valueSetKey);
|
||||
@@ -55,13 +42,6 @@ void SymbolCapabilities::SymbolKindCapabilities::setValueSet(const QList<SymbolK
|
||||
insert(valueSetKey, enumArrayToJsonArray<SymbolKind>(valueSet));
|
||||
}
|
||||
|
||||
|
||||
ClientCapabilities::ClientCapabilities()
|
||||
{
|
||||
setTextDocument(TextDocumentClientCapabilities());
|
||||
setWorkspace(WorkspaceClientCapabilities());
|
||||
}
|
||||
|
||||
bool ClientCapabilities::isValid(QStringList *error) const
|
||||
{
|
||||
return checkOptional<WorkspaceClientCapabilities>(error, workspaceKey)
|
||||
@@ -85,14 +65,6 @@ bool WorkspaceClientCapabilities::isValid(QStringList *error) const
|
||||
&& checkOptional<bool>(error,configurationKey);
|
||||
}
|
||||
|
||||
TextDocumentClientCapabilities::SynchronizationCapabilities::SynchronizationCapabilities()
|
||||
{
|
||||
setDynamicRegistration(true);
|
||||
setWillSave(true);
|
||||
setWillSaveWaitUntil(false);
|
||||
setDidSave(true);
|
||||
}
|
||||
|
||||
bool TextDocumentClientCapabilities::SynchronizationCapabilities::isValid(QStringList *error) const
|
||||
{
|
||||
return DynamicRegistrationCapabilities::isValid(error)
|
||||
@@ -101,19 +73,6 @@ bool TextDocumentClientCapabilities::SynchronizationCapabilities::isValid(QStrin
|
||||
&& checkOptional<bool>(error, didSaveKey);
|
||||
}
|
||||
|
||||
TextDocumentClientCapabilities::TextDocumentClientCapabilities()
|
||||
{
|
||||
setSynchronization(SynchronizationCapabilities());
|
||||
setDocumentSymbol(SymbolCapabilities());
|
||||
setCompletion(CompletionCapabilities());
|
||||
CodeActionCapabilities cac;
|
||||
CodeActionCapabilities::CodeActionLiteralSupport literalSupport;
|
||||
literalSupport.setCodeActionKind(
|
||||
CodeActionCapabilities::CodeActionLiteralSupport::CodeActionKind(QList<QString>{"*"}));
|
||||
cac.setCodeActionLiteralSupport(literalSupport);
|
||||
setCodeAction(cac);
|
||||
}
|
||||
|
||||
bool TextDocumentClientCapabilities::isValid(QStringList *error) const
|
||||
{
|
||||
return checkOptional<SynchronizationCapabilities>(error, synchronizationKey)
|
||||
@@ -136,24 +95,12 @@ bool TextDocumentClientCapabilities::isValid(QStringList *error) const
|
||||
&& checkOptional<DynamicRegistrationCapabilities>(error, renameKey);
|
||||
}
|
||||
|
||||
SymbolCapabilities::SymbolCapabilities()
|
||||
{
|
||||
setSymbolKind(SymbolKindCapabilities());
|
||||
}
|
||||
|
||||
bool SymbolCapabilities::isValid(QStringList *error) const
|
||||
{
|
||||
return DynamicRegistrationCapabilities::isValid(error)
|
||||
&& checkOptional<SymbolKindCapabilities>(error, symbolKindKey);
|
||||
}
|
||||
|
||||
TextDocumentClientCapabilities::CompletionCapabilities::CompletionCapabilities()
|
||||
{
|
||||
setDynamicRegistration(true);
|
||||
setCompletionItem(CompletionItemCapbilities());
|
||||
setCompletionItemKind(CompletionItemKindCapabilities());
|
||||
}
|
||||
|
||||
bool TextDocumentClientCapabilities::CompletionCapabilities::isValid(QStringList *error) const
|
||||
{
|
||||
return DynamicRegistrationCapabilities::isValid(error)
|
||||
|
||||
@@ -46,13 +46,11 @@ public:
|
||||
class LANGUAGESERVERPROTOCOL_EXPORT SymbolCapabilities : public DynamicRegistrationCapabilities
|
||||
{
|
||||
public:
|
||||
SymbolCapabilities();
|
||||
using DynamicRegistrationCapabilities::DynamicRegistrationCapabilities;
|
||||
|
||||
class SymbolKindCapabilities : public JsonObject
|
||||
class LANGUAGESERVERPROTOCOL_EXPORT SymbolKindCapabilities : public JsonObject
|
||||
{
|
||||
public:
|
||||
SymbolKindCapabilities();
|
||||
using JsonObject::JsonObject;
|
||||
|
||||
/*
|
||||
@@ -85,13 +83,11 @@ public:
|
||||
class LANGUAGESERVERPROTOCOL_EXPORT TextDocumentClientCapabilities : public JsonObject
|
||||
{
|
||||
public:
|
||||
TextDocumentClientCapabilities();
|
||||
using JsonObject::JsonObject;
|
||||
|
||||
class SynchronizationCapabilities : public DynamicRegistrationCapabilities
|
||||
class LANGUAGESERVERPROTOCOL_EXPORT SynchronizationCapabilities : public DynamicRegistrationCapabilities
|
||||
{
|
||||
public:
|
||||
SynchronizationCapabilities();
|
||||
using DynamicRegistrationCapabilities::DynamicRegistrationCapabilities;
|
||||
|
||||
// The client supports sending will save notifications.
|
||||
@@ -124,16 +120,14 @@ public:
|
||||
{ insert(synchronizationKey, synchronization); }
|
||||
void clearSynchronization() { remove(synchronizationKey); }
|
||||
|
||||
class CompletionCapabilities : public DynamicRegistrationCapabilities
|
||||
class LANGUAGESERVERPROTOCOL_EXPORT CompletionCapabilities : public DynamicRegistrationCapabilities
|
||||
{
|
||||
public:
|
||||
CompletionCapabilities();
|
||||
using DynamicRegistrationCapabilities::DynamicRegistrationCapabilities;
|
||||
|
||||
class CompletionItemCapbilities : public JsonObject
|
||||
class LANGUAGESERVERPROTOCOL_EXPORT CompletionItemCapbilities : public JsonObject
|
||||
{
|
||||
public:
|
||||
CompletionItemCapbilities();
|
||||
using JsonObject::JsonObject;
|
||||
|
||||
/*
|
||||
@@ -180,7 +174,7 @@ public:
|
||||
{ insert(completionItemKey, completionItem); }
|
||||
void clearCompletionItem() { remove(completionItemKey); }
|
||||
|
||||
class CompletionItemKindCapabilities : public JsonObject
|
||||
class LANGUAGESERVERPROTOCOL_EXPORT CompletionItemKindCapabilities : public JsonObject
|
||||
{
|
||||
public:
|
||||
CompletionItemKindCapabilities();
|
||||
@@ -227,7 +221,7 @@ public:
|
||||
{ insert(completionKey, completion); }
|
||||
void clearCompletion() { remove(completionKey); }
|
||||
|
||||
class HoverCapabilities : public DynamicRegistrationCapabilities
|
||||
class LANGUAGESERVERPROTOCOL_EXPORT HoverCapabilities : public DynamicRegistrationCapabilities
|
||||
{
|
||||
public:
|
||||
using DynamicRegistrationCapabilities::DynamicRegistrationCapabilities;
|
||||
@@ -246,12 +240,12 @@ public:
|
||||
void setHover(const HoverCapabilities &hover) { insert(hoverKey, hover); }
|
||||
void clearHover() { remove(hoverKey); }
|
||||
|
||||
class SignatureHelpCapabilities : public DynamicRegistrationCapabilities
|
||||
class LANGUAGESERVERPROTOCOL_EXPORT SignatureHelpCapabilities : public DynamicRegistrationCapabilities
|
||||
{
|
||||
public:
|
||||
using DynamicRegistrationCapabilities::DynamicRegistrationCapabilities;
|
||||
|
||||
class SignatureInformationCapabilities : public JsonObject
|
||||
class LANGUAGESERVERPROTOCOL_EXPORT SignatureInformationCapabilities : public JsonObject
|
||||
{
|
||||
public:
|
||||
using JsonObject::JsonObject;
|
||||
@@ -355,17 +349,17 @@ public:
|
||||
{ insert(implementationKey, implementation); }
|
||||
void clearImplementation() { remove(implementationKey); }
|
||||
|
||||
class CodeActionCapabilities : public DynamicRegistrationCapabilities
|
||||
class LANGUAGESERVERPROTOCOL_EXPORT CodeActionCapabilities : public DynamicRegistrationCapabilities
|
||||
{
|
||||
public:
|
||||
using DynamicRegistrationCapabilities::DynamicRegistrationCapabilities;
|
||||
|
||||
class CodeActionLiteralSupport : public JsonObject
|
||||
class LANGUAGESERVERPROTOCOL_EXPORT CodeActionLiteralSupport : public JsonObject
|
||||
{
|
||||
public:
|
||||
using JsonObject::JsonObject;
|
||||
|
||||
class CodeActionKind : public JsonObject
|
||||
class LANGUAGESERVERPROTOCOL_EXPORT CodeActionKind : public JsonObject
|
||||
{
|
||||
public:
|
||||
using JsonObject::JsonObject;
|
||||
@@ -454,7 +448,7 @@ public:
|
||||
void setApplyEdit(bool applyEdit) { insert(applyEditKey, applyEdit); }
|
||||
void clearApplyEdit() { remove(applyEditKey); }
|
||||
|
||||
class WorkspaceEditCapabilities : public JsonObject
|
||||
class LANGUAGESERVERPROTOCOL_EXPORT WorkspaceEditCapabilities : public JsonObject
|
||||
{
|
||||
public:
|
||||
using JsonObject::JsonObject;
|
||||
@@ -522,7 +516,6 @@ public:
|
||||
class LANGUAGESERVERPROTOCOL_EXPORT ClientCapabilities : public JsonObject
|
||||
{
|
||||
public:
|
||||
ClientCapabilities();
|
||||
using JsonObject::JsonObject;
|
||||
|
||||
// Workspace specific client capabilities.
|
||||
|
||||
@@ -54,10 +54,6 @@ QString Trace::toString() const
|
||||
}
|
||||
#undef RETURN_CASE
|
||||
|
||||
TextDocumentClientCapabilities::CompletionCapabilities::CompletionItemCapbilities::CompletionItemCapbilities()
|
||||
{
|
||||
}
|
||||
|
||||
Utils::optional<QList<MarkupKind>>
|
||||
TextDocumentClientCapabilities::CompletionCapabilities::CompletionItemCapbilities::
|
||||
documentationFormat() const
|
||||
|
||||
@@ -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){
|
||||
|
||||
Reference in New Issue
Block a user