From 636209fa92f95e82dbeb1b04dd2f9d56e71cebe0 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Thu, 18 Jul 2019 13:03:27 +0200 Subject: LSP: Add RenameOptions to the protocol implementation Task-number: QTCREATORBUG-22691 Change-Id: I7eb13079a174cc6da8580e11e06cef09ebcc7b99 Reviewed-by: Christian Stenger --- src/libs/languageserverprotocol/jsonkeys.h | 1 + .../languageserverprotocol/servercapabilities.cpp | 21 ++++++++++++++++++++- .../languageserverprotocol/servercapabilities.h | 18 ++++++++++++++++-- 3 files changed, 37 insertions(+), 3 deletions(-) (limited to 'src/libs') diff --git a/src/libs/languageserverprotocol/jsonkeys.h b/src/libs/languageserverprotocol/jsonkeys.h index e3673085eb..7e1ea3720b 100644 --- a/src/libs/languageserverprotocol/jsonkeys.h +++ b/src/libs/languageserverprotocol/jsonkeys.h @@ -144,6 +144,7 @@ constexpr char optionsKey[] = "options"; constexpr char parametersKey[] = "params"; constexpr char patternKey[] = "pattern"; constexpr char positionKey[] = "position"; +constexpr char prepareProviderKey[] = "prepareProvider"; constexpr char processIdKey[] = "processId"; constexpr char queryKey[] = "query"; constexpr char rangeFormattingKey[] = "rangeFormatting"; diff --git a/src/libs/languageserverprotocol/servercapabilities.cpp b/src/libs/languageserverprotocol/servercapabilities.cpp index 6ebf4f431f..3d2721f4a6 100644 --- a/src/libs/languageserverprotocol/servercapabilities.cpp +++ b/src/libs/languageserverprotocol/servercapabilities.cpp @@ -111,6 +111,25 @@ Utils::optional> ServerCapabilities::cod return Utils::nullopt; } +Utils::optional> ServerCapabilities::renameProvider() const +{ + using RetType = Utils::variant; + const QJsonValue &localValue = value(renameProviderKey); + if (localValue.isBool()) + return RetType(localValue.toBool()); + if (localValue.isObject()) + return RetType(RenameOptions(localValue.toObject())); + return Utils::nullopt; +} + +void ServerCapabilities::setRenameProvider(Utils::variant renameProvider) +{ + if (Utils::holds_alternative(renameProvider)) + insert(renameProviderKey, Utils::get(renameProvider)); + else if (Utils::holds_alternative(renameProvider)) + insert(renameProviderKey, Utils::get(renameProvider)); +} + bool ServerCapabilities::isValid(QStringList *error) const { return checkOptional(error, textDocumentSyncKey) @@ -128,7 +147,7 @@ bool ServerCapabilities::isValid(QStringList *error) const && checkOptional(error, codeLensProviderKey) && checkOptional(error, documentFormattingProviderKey) && checkOptional(error, documentRangeFormattingProviderKey) - && checkOptional(error, renameProviderKey) + && checkOptional(error, renameProviderKey) && checkOptional(error, documentLinkProviderKey) && checkOptional(error, colorProviderKey) && checkOptional(error, executeCommandProviderKey) diff --git a/src/libs/languageserverprotocol/servercapabilities.h b/src/libs/languageserverprotocol/servercapabilities.h index 71d3e4a496..0cbc7facf8 100644 --- a/src/libs/languageserverprotocol/servercapabilities.h +++ b/src/libs/languageserverprotocol/servercapabilities.h @@ -346,9 +346,23 @@ public: { insert(documentRangeFormattingProviderKey, documentRangeFormattingProvider); } void clearDocumentRangeFormattingProvider() { remove(documentRangeFormattingProviderKey); } + class RenameOptions : public JsonObject + { + public: + using JsonObject::JsonObject; + + // Renames should be checked and tested before being executed. + Utils::optional prepareProvider() const { return optionalValue(prepareProviderKey); } + void setPrepareProvider(bool prepareProvider) { insert(prepareProviderKey, prepareProvider); } + void clearPrepareProvider() { remove(prepareProviderKey); } + + bool isValid(QStringList * error) const override + { return checkOptional(error, prepareProviderKey); } + }; + // The server provides rename support. - Utils::optional renameProvider() const { return optionalValue(renameProviderKey); } - void setRenameProvider(bool renameProvider) { insert(renameProviderKey, renameProvider); } + Utils::optional> renameProvider() const; + void setRenameProvider(Utils::variant renameProvider); void clearRenameProvider() { remove(renameProviderKey); } // The server provides document link support. -- cgit v1.2.3