From 108f83f336e88ceb7e58ed4097bbb9b36eb2a465 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Mon, 7 Jan 2019 13:24:01 +0100 Subject: [PATCH] LSP: replace LanguageClientNull with nullptr_t Prevent implicit converting of the null type to JsonObjects or JsonValues. Change-Id: Ib1b74d8a7962cbb308ad0d1bca117cfd2130fb1b Reviewed-by: Christian Stenger --- src/libs/languageserverprotocol/client.h | 4 +- src/libs/languageserverprotocol/completion.h | 4 +- .../initializemessages.h | 2 +- .../languageserverprotocol/jsonrpcmessages.h | 33 +++++++++++++- .../languageserverprotocol/languagefeatures.h | 44 +++++++++---------- src/libs/languageserverprotocol/messages.h | 2 +- .../languageserverprotocol/shutdownmessages.h | 4 +- .../textsynchronization.h | 2 +- src/libs/languageserverprotocol/workspace.h | 10 ++--- src/plugins/languageclient/baseclient.cpp | 6 +-- 10 files changed, 70 insertions(+), 41 deletions(-) diff --git a/src/libs/languageserverprotocol/client.h b/src/libs/languageserverprotocol/client.h index f8f601f9d47..bf2fe5421a1 100644 --- a/src/libs/languageserverprotocol/client.h +++ b/src/libs/languageserverprotocol/client.h @@ -70,7 +70,7 @@ public: }; class LANGUAGESERVERPROTOCOL_EXPORT RegisterCapabilityRequest : public Request< - LanguageClientNull, LanguageClientNull, RegistrationParams> + std::nullptr_t, std::nullptr_t, RegistrationParams> { public: RegisterCapabilityRequest(const RegistrationParams ¶ms = RegistrationParams()); @@ -108,7 +108,7 @@ public: }; class LANGUAGESERVERPROTOCOL_EXPORT UnregisterCapabilityRequest : public Request< - LanguageClientNull, LanguageClientNull, UnregistrationParams> + std::nullptr_t, std::nullptr_t, UnregistrationParams> { public: UnregisterCapabilityRequest(const UnregistrationParams ¶ms = UnregistrationParams()); diff --git a/src/libs/languageserverprotocol/completion.h b/src/libs/languageserverprotocol/completion.h index b05825cd00b..3db5be4d704 100644 --- a/src/libs/languageserverprotocol/completion.h +++ b/src/libs/languageserverprotocol/completion.h @@ -253,7 +253,7 @@ public: }; class LANGUAGESERVERPROTOCOL_EXPORT CompletionRequest : public Request< - CompletionResult, LanguageClientNull, CompletionParams> + CompletionResult, std::nullptr_t, CompletionParams> { public: CompletionRequest(const CompletionParams ¶ms = CompletionParams()); @@ -262,7 +262,7 @@ public: }; class LANGUAGESERVERPROTOCOL_EXPORT CompletionItemResolveRequest : public Request< - CompletionItem, LanguageClientNull, CompletionItem> + CompletionItem, std::nullptr_t, CompletionItem> { public: CompletionItemResolveRequest(const CompletionItem ¶ms = CompletionItem()); diff --git a/src/libs/languageserverprotocol/initializemessages.h b/src/libs/languageserverprotocol/initializemessages.h index 2a923179b87..9224cea7737 100644 --- a/src/libs/languageserverprotocol/initializemessages.h +++ b/src/libs/languageserverprotocol/initializemessages.h @@ -124,7 +124,7 @@ public: bool isValid(QStringList *error) const override; }; -class LANGUAGESERVERPROTOCOL_EXPORT InitializeNotification : public Notification +class LANGUAGESERVERPROTOCOL_EXPORT InitializeNotification : public Notification { public: InitializeNotification(); diff --git a/src/libs/languageserverprotocol/jsonrpcmessages.h b/src/libs/languageserverprotocol/jsonrpcmessages.h index d4405b87678..3ce55474432 100644 --- a/src/libs/languageserverprotocol/jsonrpcmessages.h +++ b/src/libs/languageserverprotocol/jsonrpcmessages.h @@ -42,8 +42,6 @@ namespace LanguageServerProtocol { -using LanguageClientNull = JsonObject; - class LANGUAGESERVERPROTOCOL_EXPORT JsonRpcMessage : public IContent { public: @@ -132,6 +130,37 @@ public: } }; +template <> +class Notification : public JsonRpcMessage +{ +public: + Notification() : Notification(QString()) {} + Notification(const QString &methodName, const std::nullptr_t &/*params*/ = nullptr) + { setMethod(methodName); } + using JsonRpcMessage::JsonRpcMessage; + + QString method() const + { return fromJsonValue(m_jsonObject.value(methodKey)); } + void setMethod(const QString &method) + { m_jsonObject.insert(methodKey, method); } + + Utils::optional params() const + { return nullptr; } + void setParams(const std::nullptr_t &/*params*/) + { m_jsonObject.insert(parametersKey, QJsonValue::Null); } + void clearParams() { m_jsonObject.remove(parametersKey); } + + bool isValid(QString *errorMessage) const override + { + return JsonRpcMessage::isValid(errorMessage) + && m_jsonObject.value(methodKey).isString() + && parametersAreValid(errorMessage); + } + + virtual bool parametersAreValid(QString * /*errorMessage*/) const + { return true; } +}; + template class ResponseError : public JsonObject { diff --git a/src/libs/languageserverprotocol/languagefeatures.h b/src/libs/languageserverprotocol/languagefeatures.h index d585ce8c9fa..5b9bd3cf440 100644 --- a/src/libs/languageserverprotocol/languagefeatures.h +++ b/src/libs/languageserverprotocol/languagefeatures.h @@ -85,8 +85,8 @@ public: { return check(error, contentKey) && checkOptional(error, rangeKey); } }; -class LANGUAGESERVERPROTOCOL_EXPORT HoverRequest : public Request< - Hover, LanguageClientNull, TextDocumentPositionParams> +class LANGUAGESERVERPROTOCOL_EXPORT HoverRequest + : public Request { public: HoverRequest(const TextDocumentPositionParams ¶ms = TextDocumentPositionParams()); @@ -180,8 +180,8 @@ public: bool isValid(QStringList *error) const override; }; -class LANGUAGESERVERPROTOCOL_EXPORT SignatureHelpRequest : public Request< - LanguageClientValue, LanguageClientNull, TextDocumentPositionParams> +class LANGUAGESERVERPROTOCOL_EXPORT SignatureHelpRequest + : public Request, std::nullptr_t, TextDocumentPositionParams> { public: SignatureHelpRequest(const TextDocumentPositionParams ¶ms = TextDocumentPositionParams()); @@ -198,8 +198,8 @@ public: using variant::variant; }; -class LANGUAGESERVERPROTOCOL_EXPORT GotoDefinitionRequest : public Request< - GotoResult, LanguageClientNull, TextDocumentPositionParams> +class LANGUAGESERVERPROTOCOL_EXPORT GotoDefinitionRequest + : public Request { public: GotoDefinitionRequest(const TextDocumentPositionParams ¶ms = TextDocumentPositionParams()); @@ -208,7 +208,7 @@ public: }; class LANGUAGESERVERPROTOCOL_EXPORT GotoTypeDefinitionRequest : public Request< - GotoResult, LanguageClientNull, TextDocumentPositionParams> + GotoResult, std::nullptr_t, TextDocumentPositionParams> { public: GotoTypeDefinitionRequest( @@ -218,7 +218,7 @@ public: }; class LANGUAGESERVERPROTOCOL_EXPORT GotoImplementationRequest : public Request< - GotoResult, LanguageClientNull, TextDocumentPositionParams> + GotoResult, std::nullptr_t, TextDocumentPositionParams> { public: GotoImplementationRequest( @@ -254,7 +254,7 @@ public: }; class LANGUAGESERVERPROTOCOL_EXPORT FindReferencesRequest : public Request< - LanguageClientArray, LanguageClientNull, ReferenceParams> + LanguageClientArray, std::nullptr_t, ReferenceParams> { public: FindReferencesRequest(const ReferenceParams ¶ms = ReferenceParams()); @@ -295,7 +295,7 @@ public: }; class LANGUAGESERVERPROTOCOL_EXPORT DocumentHighlightsRequest : public Request< - DocumentHighlightsResult, LanguageClientNull, TextDocumentPositionParams> + DocumentHighlightsResult, std::nullptr_t, TextDocumentPositionParams> { public: DocumentHighlightsRequest( @@ -333,7 +333,7 @@ public: }; class LANGUAGESERVERPROTOCOL_EXPORT DocumentSymbolsRequest - : public Request + : public Request { public: DocumentSymbolsRequest(const DocumentSymbolParams ¶ms = DocumentSymbolParams()); @@ -373,7 +373,7 @@ public: }; class LANGUAGESERVERPROTOCOL_EXPORT CodeActionRequest : public Request< - LanguageClientArray, LanguageClientNull, CodeActionParams> + LanguageClientArray, std::nullptr_t, CodeActionParams> { public: CodeActionRequest(const CodeActionParams ¶ms = CodeActionParams()); @@ -404,7 +404,7 @@ public: }; class LANGUAGESERVERPROTOCOL_EXPORT CodeLensRequest : public Request< - LanguageClientArray, LanguageClientNull, CodeLensParams> + LanguageClientArray, std::nullptr_t, CodeLensParams> { public: CodeLensRequest(const CodeLensParams ¶ms = CodeLensParams()); @@ -413,7 +413,7 @@ public: }; class LANGUAGESERVERPROTOCOL_EXPORT CodeLensResolveRequest : public Request< - CodeLens, LanguageClientNull, CodeLens> + CodeLens, std::nullptr_t, CodeLens> { public: CodeLensResolveRequest(const CodeLens ¶ms = CodeLens()); @@ -444,7 +444,7 @@ public: using DocumentLinkParams = TextDocumentParams; class LANGUAGESERVERPROTOCOL_EXPORT DocumentLinkRequest : public Request< - LanguageClientValue, LanguageClientNull, DocumentLinkParams> + LanguageClientValue, std::nullptr_t, DocumentLinkParams> { public: DocumentLinkRequest(const DocumentLinkParams ¶ms = DocumentLinkParams()); @@ -453,7 +453,7 @@ public: }; class LANGUAGESERVERPROTOCOL_EXPORT DocumentLinkResolveRequest : public Request< - DocumentLink, LanguageClientNull, DocumentLink> + DocumentLink, std::nullptr_t, DocumentLink> { public: DocumentLinkResolveRequest(const DocumentLink ¶ms = DocumentLink()); @@ -499,7 +499,7 @@ public: }; class LANGUAGESERVERPROTOCOL_EXPORT DocumentColorRequest : public Request< - QList, LanguageClientNull, DocumentColorParams> + QList, std::nullptr_t, DocumentColorParams> { public: DocumentColorRequest(const DocumentColorParams ¶ms = DocumentColorParams()); @@ -553,7 +553,7 @@ public: }; class LANGUAGESERVERPROTOCOL_EXPORT ColorPresentationRequest : public Request< - QList, LanguageClientNull, ColorPresentationParams> + QList, std::nullptr_t, ColorPresentationParams> { public: ColorPresentationRequest(const ColorPresentationParams ¶ms = ColorPresentationParams()); @@ -610,7 +610,7 @@ public: }; class LANGUAGESERVERPROTOCOL_EXPORT DocumentFormattingRequest : public Request< - LanguageClientArray, LanguageClientNull, DocumentFormattingParams> + LanguageClientArray, std::nullptr_t, DocumentFormattingParams> { public: DocumentFormattingRequest(const DocumentFormattingParams ¶ms = DocumentFormattingParams()); @@ -638,7 +638,7 @@ public: }; class LANGUAGESERVERPROTOCOL_EXPORT DocumentRangeFormattingRequest : public Request< - QList, LanguageClientNull, DocumentFormattingParams> + QList, std::nullptr_t, DocumentFormattingParams> { public: DocumentRangeFormattingRequest(const DocumentFormattingParams ¶ms = DocumentFormattingParams()); @@ -669,7 +669,7 @@ public: }; class LANGUAGESERVERPROTOCOL_EXPORT DocumentOnTypeFormattingRequest : public Request< - QList, LanguageClientNull, DocumentFormattingParams> + QList, std::nullptr_t, DocumentFormattingParams> { public: DocumentOnTypeFormattingRequest( @@ -698,7 +698,7 @@ public: }; class LANGUAGESERVERPROTOCOL_EXPORT RenameRequest : public Request< - WorkspaceEdit, LanguageClientNull, RenameParams> + WorkspaceEdit, std::nullptr_t, RenameParams> { public: RenameRequest(const RenameParams ¶ms = RenameParams()); diff --git a/src/libs/languageserverprotocol/messages.h b/src/libs/languageserverprotocol/messages.h index 904f78d3eeb..9ad06efb9e2 100644 --- a/src/libs/languageserverprotocol/messages.h +++ b/src/libs/languageserverprotocol/messages.h @@ -87,7 +87,7 @@ public: }; class LANGUAGESERVERPROTOCOL_EXPORT ShowMessageRequest : public Request< - LanguageClientValue, LanguageClientNull, ShowMessageRequestParams> + LanguageClientValue, std::nullptr_t, ShowMessageRequestParams> { public: ShowMessageRequest(const ShowMessageRequestParams ¶ms = ShowMessageRequestParams()); diff --git a/src/libs/languageserverprotocol/shutdownmessages.h b/src/libs/languageserverprotocol/shutdownmessages.h index 57bc2d3bea2..be051d57452 100644 --- a/src/libs/languageserverprotocol/shutdownmessages.h +++ b/src/libs/languageserverprotocol/shutdownmessages.h @@ -30,7 +30,7 @@ namespace LanguageServerProtocol { class LANGUAGESERVERPROTOCOL_EXPORT ShutdownRequest : public Request< - LanguageClientNull, LanguageClientNull, LanguageClientNull> + std::nullptr_t, std::nullptr_t, std::nullptr_t> { public: ShutdownRequest(); @@ -38,7 +38,7 @@ public: constexpr static const char methodName[] = "shutdown"; }; -class LANGUAGESERVERPROTOCOL_EXPORT ExitNotification : public Notification +class LANGUAGESERVERPROTOCOL_EXPORT ExitNotification : public Notification { public: ExitNotification(); diff --git a/src/libs/languageserverprotocol/textsynchronization.h b/src/libs/languageserverprotocol/textsynchronization.h index 8569bc6ef9e..2b659366cdf 100644 --- a/src/libs/languageserverprotocol/textsynchronization.h +++ b/src/libs/languageserverprotocol/textsynchronization.h @@ -165,7 +165,7 @@ public: }; class LANGUAGESERVERPROTOCOL_EXPORT WillSaveWaitUntilTextDocumentRequest : public Request< - LanguageClientArray, LanguageClientNull, WillSaveTextDocumentParams> + LanguageClientArray, std::nullptr_t, WillSaveTextDocumentParams> { public: WillSaveWaitUntilTextDocumentRequest( diff --git a/src/libs/languageserverprotocol/workspace.h b/src/libs/languageserverprotocol/workspace.h index 8674165c072..771e6d9d9b9 100644 --- a/src/libs/languageserverprotocol/workspace.h +++ b/src/libs/languageserverprotocol/workspace.h @@ -30,7 +30,7 @@ namespace LanguageServerProtocol { class LANGUAGESERVERPROTOCOL_EXPORT WorkSpaceFolderRequest : public Request< - Utils::variant, Utils::nullopt_t>, LanguageClientNull, LanguageClientNull> + Utils::variant, Utils::nullopt_t>, std::nullptr_t, std::nullptr_t> { public: WorkSpaceFolderRequest(); @@ -126,7 +126,7 @@ public: }; class LANGUAGESERVERPROTOCOL_EXPORT ConfigurationRequest : public Request< - LanguageClientArray, LanguageClientNull, ConfigurationParams> + LanguageClientArray, std::nullptr_t, ConfigurationParams> { public: ConfigurationRequest(const ConfigurationParams ¶ms = ConfigurationParams()); @@ -188,7 +188,7 @@ public: }; class LANGUAGESERVERPROTOCOL_EXPORT WorkspaceSymbolRequest : public Request< - LanguageClientArray, LanguageClientNull, WorkspaceSymbolParams> + LanguageClientArray, std::nullptr_t, WorkspaceSymbolParams> { public: WorkspaceSymbolRequest(const WorkspaceSymbolParams ¶ms = WorkspaceSymbolParams()); @@ -218,7 +218,7 @@ public: }; class LANGUAGESERVERPROTOCOL_EXPORT ExecuteCommandRequest : public Request< - QJsonValue, LanguageClientNull, ExecuteCommandParams> + QJsonValue, std::nullptr_t, ExecuteCommandParams> { public: ExecuteCommandRequest(const ExecuteCommandParams ¶ms = ExecuteCommandParams()); @@ -254,7 +254,7 @@ public: }; class LANGUAGESERVERPROTOCOL_EXPORT ApplyWorkspaceEditRequest : public Request< - ApplyWorkspaceEditResponse, LanguageClientNull, ApplyWorkspaceEditParams> + ApplyWorkspaceEditResponse, std::nullptr_t, ApplyWorkspaceEditParams> { public: ApplyWorkspaceEditRequest(const ApplyWorkspaceEditParams ¶ms = ApplyWorkspaceEditParams()); diff --git a/src/plugins/languageclient/baseclient.cpp b/src/plugins/languageclient/baseclient.cpp index 3bae36c25a2..e97f4688620 100644 --- a/src/plugins/languageclient/baseclient.cpp +++ b/src/plugins/languageclient/baseclient.cpp @@ -617,7 +617,7 @@ void BaseClient::handleMethod(const QString &method, MessageId id, const IConten } else { ShowMessageRequest::Response response; response.setId(request->id()); - ResponseError error; + ResponseError error; const QString errorMessage = QString("Could not parse ShowMessageRequest parameter of '%1': \"%2\"") .arg(request->id().toString(), @@ -696,9 +696,9 @@ void BaseClient::intializeCallback(const InitializeRequest::Response &initRespon void BaseClient::shutDownCallback(const ShutdownRequest::Response &shutdownResponse) { QTC_ASSERT(m_state == ShutdownRequested, return); - optional> errorValue = shutdownResponse.error(); + optional errorValue = shutdownResponse.error(); if (errorValue.has_value()) { - ResponseError error = errorValue.value(); + ShutdownRequest::Response::Error error = errorValue.value(); qDebug() << error; return; }