diff options
author | David Schulz <david.schulz@qt.io> | 2019-07-18 13:03:27 +0200 |
---|---|---|
committer | David Schulz <david.schulz@qt.io> | 2019-07-19 07:27:07 +0000 |
commit | 636209fa92f95e82dbeb1b04dd2f9d56e71cebe0 (patch) | |
tree | d9bc0b53c1f544a683eca40a56d7fedcc1b7deba /src/libs | |
parent | 524cdf54bc8996ba2d7bbae1c61acb3e0b86f77a (diff) |
LSP: Add RenameOptions to the protocol implementation
Task-number: QTCREATORBUG-22691
Change-Id: I7eb13079a174cc6da8580e11e06cef09ebcc7b99
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Diffstat (limited to 'src/libs')
-rw-r--r-- | src/libs/languageserverprotocol/jsonkeys.h | 1 | ||||
-rw-r--r-- | src/libs/languageserverprotocol/servercapabilities.cpp | 21 | ||||
-rw-r--r-- | src/libs/languageserverprotocol/servercapabilities.h | 18 |
3 files changed, 37 insertions, 3 deletions
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<Utils::variant<bool, CodeActionOptions>> ServerCapabilities::cod return Utils::nullopt; } +Utils::optional<Utils::variant<ServerCapabilities::RenameOptions, bool>> ServerCapabilities::renameProvider() const +{ + using RetType = Utils::variant<ServerCapabilities::RenameOptions, bool>; + 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<ServerCapabilities::RenameOptions, bool> renameProvider) +{ + if (Utils::holds_alternative<bool>(renameProvider)) + insert(renameProviderKey, Utils::get<bool>(renameProvider)); + else if (Utils::holds_alternative<RenameOptions>(renameProvider)) + insert(renameProviderKey, Utils::get<RenameOptions>(renameProvider)); +} + bool ServerCapabilities::isValid(QStringList *error) const { return checkOptional<TextDocumentSyncOptions, int>(error, textDocumentSyncKey) @@ -128,7 +147,7 @@ bool ServerCapabilities::isValid(QStringList *error) const && checkOptional<CodeLensOptions>(error, codeLensProviderKey) && checkOptional<bool>(error, documentFormattingProviderKey) && checkOptional<bool>(error, documentRangeFormattingProviderKey) - && checkOptional<bool>(error, renameProviderKey) + && checkOptional<bool, RenameOptions>(error, renameProviderKey) && checkOptional<DocumentLinkOptions>(error, documentLinkProviderKey) && checkOptional<TextDocumentRegistrationOptions>(error, colorProviderKey) && checkOptional<ExecuteCommandOptions>(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<bool> prepareProvider() const { return optionalValue<bool>(prepareProviderKey); } + void setPrepareProvider(bool prepareProvider) { insert(prepareProviderKey, prepareProvider); } + void clearPrepareProvider() { remove(prepareProviderKey); } + + bool isValid(QStringList * error) const override + { return checkOptional<bool>(error, prepareProviderKey); } + }; + // The server provides rename support. - Utils::optional<bool> renameProvider() const { return optionalValue<bool>(renameProviderKey); } - void setRenameProvider(bool renameProvider) { insert(renameProviderKey, renameProvider); } + Utils::optional<Utils::variant<RenameOptions, bool>> renameProvider() const; + void setRenameProvider(Utils::variant<RenameOptions,bool> renameProvider); void clearRenameProvider() { remove(renameProviderKey); } // The server provides document link support. |