aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs
diff options
context:
space:
mode:
authorDavid Schulz <david.schulz@qt.io>2019-07-18 13:03:27 +0200
committerDavid Schulz <david.schulz@qt.io>2019-07-19 07:27:07 +0000
commit636209fa92f95e82dbeb1b04dd2f9d56e71cebe0 (patch)
treed9bc0b53c1f544a683eca40a56d7fedcc1b7deba /src/libs
parent524cdf54bc8996ba2d7bbae1c61acb3e0b86f77a (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.h1
-rw-r--r--src/libs/languageserverprotocol/servercapabilities.cpp21
-rw-r--r--src/libs/languageserverprotocol/servercapabilities.h18
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.