LSP: replace LanguageClientNull with nullptr_t

Prevent implicit converting of the null type to JsonObjects or
JsonValues.

Change-Id: Ib1b74d8a7962cbb308ad0d1bca117cfd2130fb1b
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
David Schulz
2019-01-07 13:24:01 +01:00
parent b2638f8ac3
commit 108f83f336
10 changed files with 70 additions and 41 deletions

View File

@@ -70,7 +70,7 @@ public:
}; };
class LANGUAGESERVERPROTOCOL_EXPORT RegisterCapabilityRequest : public Request< class LANGUAGESERVERPROTOCOL_EXPORT RegisterCapabilityRequest : public Request<
LanguageClientNull, LanguageClientNull, RegistrationParams> std::nullptr_t, std::nullptr_t, RegistrationParams>
{ {
public: public:
RegisterCapabilityRequest(const RegistrationParams &params = RegistrationParams()); RegisterCapabilityRequest(const RegistrationParams &params = RegistrationParams());
@@ -108,7 +108,7 @@ public:
}; };
class LANGUAGESERVERPROTOCOL_EXPORT UnregisterCapabilityRequest : public Request< class LANGUAGESERVERPROTOCOL_EXPORT UnregisterCapabilityRequest : public Request<
LanguageClientNull, LanguageClientNull, UnregistrationParams> std::nullptr_t, std::nullptr_t, UnregistrationParams>
{ {
public: public:
UnregisterCapabilityRequest(const UnregistrationParams &params = UnregistrationParams()); UnregisterCapabilityRequest(const UnregistrationParams &params = UnregistrationParams());

View File

@@ -253,7 +253,7 @@ public:
}; };
class LANGUAGESERVERPROTOCOL_EXPORT CompletionRequest : public Request< class LANGUAGESERVERPROTOCOL_EXPORT CompletionRequest : public Request<
CompletionResult, LanguageClientNull, CompletionParams> CompletionResult, std::nullptr_t, CompletionParams>
{ {
public: public:
CompletionRequest(const CompletionParams &params = CompletionParams()); CompletionRequest(const CompletionParams &params = CompletionParams());
@@ -262,7 +262,7 @@ public:
}; };
class LANGUAGESERVERPROTOCOL_EXPORT CompletionItemResolveRequest : public Request< class LANGUAGESERVERPROTOCOL_EXPORT CompletionItemResolveRequest : public Request<
CompletionItem, LanguageClientNull, CompletionItem> CompletionItem, std::nullptr_t, CompletionItem>
{ {
public: public:
CompletionItemResolveRequest(const CompletionItem &params = CompletionItem()); CompletionItemResolveRequest(const CompletionItem &params = CompletionItem());

View File

@@ -124,7 +124,7 @@ public:
bool isValid(QStringList *error) const override; bool isValid(QStringList *error) const override;
}; };
class LANGUAGESERVERPROTOCOL_EXPORT InitializeNotification : public Notification<LanguageClientNull> class LANGUAGESERVERPROTOCOL_EXPORT InitializeNotification : public Notification<std::nullptr_t>
{ {
public: public:
InitializeNotification(); InitializeNotification();

View File

@@ -42,8 +42,6 @@
namespace LanguageServerProtocol { namespace LanguageServerProtocol {
using LanguageClientNull = JsonObject;
class LANGUAGESERVERPROTOCOL_EXPORT JsonRpcMessage : public IContent class LANGUAGESERVERPROTOCOL_EXPORT JsonRpcMessage : public IContent
{ {
public: public:
@@ -132,6 +130,37 @@ public:
} }
}; };
template <>
class Notification<std::nullptr_t> : 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<QString>(m_jsonObject.value(methodKey)); }
void setMethod(const QString &method)
{ m_jsonObject.insert(methodKey, method); }
Utils::optional<std::nullptr_t> 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 <typename Error> template <typename Error>
class ResponseError : public JsonObject class ResponseError : public JsonObject
{ {

View File

@@ -85,8 +85,8 @@ public:
{ return check<MarkedString>(error, contentKey) && checkOptional<Range>(error, rangeKey); } { return check<MarkedString>(error, contentKey) && checkOptional<Range>(error, rangeKey); }
}; };
class LANGUAGESERVERPROTOCOL_EXPORT HoverRequest : public Request< class LANGUAGESERVERPROTOCOL_EXPORT HoverRequest
Hover, LanguageClientNull, TextDocumentPositionParams> : public Request<Hover, std::nullptr_t, TextDocumentPositionParams>
{ {
public: public:
HoverRequest(const TextDocumentPositionParams &params = TextDocumentPositionParams()); HoverRequest(const TextDocumentPositionParams &params = TextDocumentPositionParams());
@@ -180,8 +180,8 @@ public:
bool isValid(QStringList *error) const override; bool isValid(QStringList *error) const override;
}; };
class LANGUAGESERVERPROTOCOL_EXPORT SignatureHelpRequest : public Request< class LANGUAGESERVERPROTOCOL_EXPORT SignatureHelpRequest
LanguageClientValue<SignatureHelp>, LanguageClientNull, TextDocumentPositionParams> : public Request<LanguageClientValue<SignatureHelp>, std::nullptr_t, TextDocumentPositionParams>
{ {
public: public:
SignatureHelpRequest(const TextDocumentPositionParams &params = TextDocumentPositionParams()); SignatureHelpRequest(const TextDocumentPositionParams &params = TextDocumentPositionParams());
@@ -198,8 +198,8 @@ public:
using variant::variant; using variant::variant;
}; };
class LANGUAGESERVERPROTOCOL_EXPORT GotoDefinitionRequest : public Request< class LANGUAGESERVERPROTOCOL_EXPORT GotoDefinitionRequest
GotoResult, LanguageClientNull, TextDocumentPositionParams> : public Request<GotoResult, std::nullptr_t, TextDocumentPositionParams>
{ {
public: public:
GotoDefinitionRequest(const TextDocumentPositionParams &params = TextDocumentPositionParams()); GotoDefinitionRequest(const TextDocumentPositionParams &params = TextDocumentPositionParams());
@@ -208,7 +208,7 @@ public:
}; };
class LANGUAGESERVERPROTOCOL_EXPORT GotoTypeDefinitionRequest : public Request< class LANGUAGESERVERPROTOCOL_EXPORT GotoTypeDefinitionRequest : public Request<
GotoResult, LanguageClientNull, TextDocumentPositionParams> GotoResult, std::nullptr_t, TextDocumentPositionParams>
{ {
public: public:
GotoTypeDefinitionRequest( GotoTypeDefinitionRequest(
@@ -218,7 +218,7 @@ public:
}; };
class LANGUAGESERVERPROTOCOL_EXPORT GotoImplementationRequest : public Request< class LANGUAGESERVERPROTOCOL_EXPORT GotoImplementationRequest : public Request<
GotoResult, LanguageClientNull, TextDocumentPositionParams> GotoResult, std::nullptr_t, TextDocumentPositionParams>
{ {
public: public:
GotoImplementationRequest( GotoImplementationRequest(
@@ -254,7 +254,7 @@ public:
}; };
class LANGUAGESERVERPROTOCOL_EXPORT FindReferencesRequest : public Request< class LANGUAGESERVERPROTOCOL_EXPORT FindReferencesRequest : public Request<
LanguageClientArray<Location>, LanguageClientNull, ReferenceParams> LanguageClientArray<Location>, std::nullptr_t, ReferenceParams>
{ {
public: public:
FindReferencesRequest(const ReferenceParams &params = ReferenceParams()); FindReferencesRequest(const ReferenceParams &params = ReferenceParams());
@@ -295,7 +295,7 @@ public:
}; };
class LANGUAGESERVERPROTOCOL_EXPORT DocumentHighlightsRequest : public Request< class LANGUAGESERVERPROTOCOL_EXPORT DocumentHighlightsRequest : public Request<
DocumentHighlightsResult, LanguageClientNull, TextDocumentPositionParams> DocumentHighlightsResult, std::nullptr_t, TextDocumentPositionParams>
{ {
public: public:
DocumentHighlightsRequest( DocumentHighlightsRequest(
@@ -333,7 +333,7 @@ public:
}; };
class LANGUAGESERVERPROTOCOL_EXPORT DocumentSymbolsRequest class LANGUAGESERVERPROTOCOL_EXPORT DocumentSymbolsRequest
: public Request<DocumentSymbolsResult, LanguageClientNull, DocumentSymbolParams> : public Request<DocumentSymbolsResult, std::nullptr_t, DocumentSymbolParams>
{ {
public: public:
DocumentSymbolsRequest(const DocumentSymbolParams &params = DocumentSymbolParams()); DocumentSymbolsRequest(const DocumentSymbolParams &params = DocumentSymbolParams());
@@ -373,7 +373,7 @@ public:
}; };
class LANGUAGESERVERPROTOCOL_EXPORT CodeActionRequest : public Request< class LANGUAGESERVERPROTOCOL_EXPORT CodeActionRequest : public Request<
LanguageClientArray<Command>, LanguageClientNull, CodeActionParams> LanguageClientArray<Command>, std::nullptr_t, CodeActionParams>
{ {
public: public:
CodeActionRequest(const CodeActionParams &params = CodeActionParams()); CodeActionRequest(const CodeActionParams &params = CodeActionParams());
@@ -404,7 +404,7 @@ public:
}; };
class LANGUAGESERVERPROTOCOL_EXPORT CodeLensRequest : public Request< class LANGUAGESERVERPROTOCOL_EXPORT CodeLensRequest : public Request<
LanguageClientArray<CodeLens>, LanguageClientNull, CodeLensParams> LanguageClientArray<CodeLens>, std::nullptr_t, CodeLensParams>
{ {
public: public:
CodeLensRequest(const CodeLensParams &params = CodeLensParams()); CodeLensRequest(const CodeLensParams &params = CodeLensParams());
@@ -413,7 +413,7 @@ public:
}; };
class LANGUAGESERVERPROTOCOL_EXPORT CodeLensResolveRequest : public Request< class LANGUAGESERVERPROTOCOL_EXPORT CodeLensResolveRequest : public Request<
CodeLens, LanguageClientNull, CodeLens> CodeLens, std::nullptr_t, CodeLens>
{ {
public: public:
CodeLensResolveRequest(const CodeLens &params = CodeLens()); CodeLensResolveRequest(const CodeLens &params = CodeLens());
@@ -444,7 +444,7 @@ public:
using DocumentLinkParams = TextDocumentParams; using DocumentLinkParams = TextDocumentParams;
class LANGUAGESERVERPROTOCOL_EXPORT DocumentLinkRequest : public Request< class LANGUAGESERVERPROTOCOL_EXPORT DocumentLinkRequest : public Request<
LanguageClientValue<DocumentLink>, LanguageClientNull, DocumentLinkParams> LanguageClientValue<DocumentLink>, std::nullptr_t, DocumentLinkParams>
{ {
public: public:
DocumentLinkRequest(const DocumentLinkParams &params = DocumentLinkParams()); DocumentLinkRequest(const DocumentLinkParams &params = DocumentLinkParams());
@@ -453,7 +453,7 @@ public:
}; };
class LANGUAGESERVERPROTOCOL_EXPORT DocumentLinkResolveRequest : public Request< class LANGUAGESERVERPROTOCOL_EXPORT DocumentLinkResolveRequest : public Request<
DocumentLink, LanguageClientNull, DocumentLink> DocumentLink, std::nullptr_t, DocumentLink>
{ {
public: public:
DocumentLinkResolveRequest(const DocumentLink &params = DocumentLink()); DocumentLinkResolveRequest(const DocumentLink &params = DocumentLink());
@@ -499,7 +499,7 @@ public:
}; };
class LANGUAGESERVERPROTOCOL_EXPORT DocumentColorRequest : public Request< class LANGUAGESERVERPROTOCOL_EXPORT DocumentColorRequest : public Request<
QList<ColorInformation>, LanguageClientNull, DocumentColorParams> QList<ColorInformation>, std::nullptr_t, DocumentColorParams>
{ {
public: public:
DocumentColorRequest(const DocumentColorParams &params = DocumentColorParams()); DocumentColorRequest(const DocumentColorParams &params = DocumentColorParams());
@@ -553,7 +553,7 @@ public:
}; };
class LANGUAGESERVERPROTOCOL_EXPORT ColorPresentationRequest : public Request< class LANGUAGESERVERPROTOCOL_EXPORT ColorPresentationRequest : public Request<
QList<ColorPresentation>, LanguageClientNull, ColorPresentationParams> QList<ColorPresentation>, std::nullptr_t, ColorPresentationParams>
{ {
public: public:
ColorPresentationRequest(const ColorPresentationParams &params = ColorPresentationParams()); ColorPresentationRequest(const ColorPresentationParams &params = ColorPresentationParams());
@@ -610,7 +610,7 @@ public:
}; };
class LANGUAGESERVERPROTOCOL_EXPORT DocumentFormattingRequest : public Request< class LANGUAGESERVERPROTOCOL_EXPORT DocumentFormattingRequest : public Request<
LanguageClientArray<TextEdit>, LanguageClientNull, DocumentFormattingParams> LanguageClientArray<TextEdit>, std::nullptr_t, DocumentFormattingParams>
{ {
public: public:
DocumentFormattingRequest(const DocumentFormattingParams &params = DocumentFormattingParams()); DocumentFormattingRequest(const DocumentFormattingParams &params = DocumentFormattingParams());
@@ -638,7 +638,7 @@ public:
}; };
class LANGUAGESERVERPROTOCOL_EXPORT DocumentRangeFormattingRequest : public Request< class LANGUAGESERVERPROTOCOL_EXPORT DocumentRangeFormattingRequest : public Request<
QList<TextEdit>, LanguageClientNull, DocumentFormattingParams> QList<TextEdit>, std::nullptr_t, DocumentFormattingParams>
{ {
public: public:
DocumentRangeFormattingRequest(const DocumentFormattingParams &params = DocumentFormattingParams()); DocumentRangeFormattingRequest(const DocumentFormattingParams &params = DocumentFormattingParams());
@@ -669,7 +669,7 @@ public:
}; };
class LANGUAGESERVERPROTOCOL_EXPORT DocumentOnTypeFormattingRequest : public Request< class LANGUAGESERVERPROTOCOL_EXPORT DocumentOnTypeFormattingRequest : public Request<
QList<TextEdit>, LanguageClientNull, DocumentFormattingParams> QList<TextEdit>, std::nullptr_t, DocumentFormattingParams>
{ {
public: public:
DocumentOnTypeFormattingRequest( DocumentOnTypeFormattingRequest(
@@ -698,7 +698,7 @@ public:
}; };
class LANGUAGESERVERPROTOCOL_EXPORT RenameRequest : public Request< class LANGUAGESERVERPROTOCOL_EXPORT RenameRequest : public Request<
WorkspaceEdit, LanguageClientNull, RenameParams> WorkspaceEdit, std::nullptr_t, RenameParams>
{ {
public: public:
RenameRequest(const RenameParams &params = RenameParams()); RenameRequest(const RenameParams &params = RenameParams());

View File

@@ -87,7 +87,7 @@ public:
}; };
class LANGUAGESERVERPROTOCOL_EXPORT ShowMessageRequest : public Request< class LANGUAGESERVERPROTOCOL_EXPORT ShowMessageRequest : public Request<
LanguageClientValue<MessageActionItem>, LanguageClientNull, ShowMessageRequestParams> LanguageClientValue<MessageActionItem>, std::nullptr_t, ShowMessageRequestParams>
{ {
public: public:
ShowMessageRequest(const ShowMessageRequestParams &params = ShowMessageRequestParams()); ShowMessageRequest(const ShowMessageRequestParams &params = ShowMessageRequestParams());

View File

@@ -30,7 +30,7 @@
namespace LanguageServerProtocol { namespace LanguageServerProtocol {
class LANGUAGESERVERPROTOCOL_EXPORT ShutdownRequest : public Request< class LANGUAGESERVERPROTOCOL_EXPORT ShutdownRequest : public Request<
LanguageClientNull, LanguageClientNull, LanguageClientNull> std::nullptr_t, std::nullptr_t, std::nullptr_t>
{ {
public: public:
ShutdownRequest(); ShutdownRequest();
@@ -38,7 +38,7 @@ public:
constexpr static const char methodName[] = "shutdown"; constexpr static const char methodName[] = "shutdown";
}; };
class LANGUAGESERVERPROTOCOL_EXPORT ExitNotification : public Notification<LanguageClientNull> class LANGUAGESERVERPROTOCOL_EXPORT ExitNotification : public Notification<std::nullptr_t>
{ {
public: public:
ExitNotification(); ExitNotification();

View File

@@ -165,7 +165,7 @@ public:
}; };
class LANGUAGESERVERPROTOCOL_EXPORT WillSaveWaitUntilTextDocumentRequest : public Request< class LANGUAGESERVERPROTOCOL_EXPORT WillSaveWaitUntilTextDocumentRequest : public Request<
LanguageClientArray<TextEdit>, LanguageClientNull, WillSaveTextDocumentParams> LanguageClientArray<TextEdit>, std::nullptr_t, WillSaveTextDocumentParams>
{ {
public: public:
WillSaveWaitUntilTextDocumentRequest( WillSaveWaitUntilTextDocumentRequest(

View File

@@ -30,7 +30,7 @@
namespace LanguageServerProtocol { namespace LanguageServerProtocol {
class LANGUAGESERVERPROTOCOL_EXPORT WorkSpaceFolderRequest : public Request< class LANGUAGESERVERPROTOCOL_EXPORT WorkSpaceFolderRequest : public Request<
Utils::variant<QList<WorkSpaceFolder>, Utils::nullopt_t>, LanguageClientNull, LanguageClientNull> Utils::variant<QList<WorkSpaceFolder>, Utils::nullopt_t>, std::nullptr_t, std::nullptr_t>
{ {
public: public:
WorkSpaceFolderRequest(); WorkSpaceFolderRequest();
@@ -126,7 +126,7 @@ public:
}; };
class LANGUAGESERVERPROTOCOL_EXPORT ConfigurationRequest : public Request< class LANGUAGESERVERPROTOCOL_EXPORT ConfigurationRequest : public Request<
LanguageClientArray<QJsonValue>, LanguageClientNull, ConfigurationParams> LanguageClientArray<QJsonValue>, std::nullptr_t, ConfigurationParams>
{ {
public: public:
ConfigurationRequest(const ConfigurationParams &params = ConfigurationParams()); ConfigurationRequest(const ConfigurationParams &params = ConfigurationParams());
@@ -188,7 +188,7 @@ public:
}; };
class LANGUAGESERVERPROTOCOL_EXPORT WorkspaceSymbolRequest : public Request< class LANGUAGESERVERPROTOCOL_EXPORT WorkspaceSymbolRequest : public Request<
LanguageClientArray<SymbolInformation>, LanguageClientNull, WorkspaceSymbolParams> LanguageClientArray<SymbolInformation>, std::nullptr_t, WorkspaceSymbolParams>
{ {
public: public:
WorkspaceSymbolRequest(const WorkspaceSymbolParams &params = WorkspaceSymbolParams()); WorkspaceSymbolRequest(const WorkspaceSymbolParams &params = WorkspaceSymbolParams());
@@ -218,7 +218,7 @@ public:
}; };
class LANGUAGESERVERPROTOCOL_EXPORT ExecuteCommandRequest : public Request< class LANGUAGESERVERPROTOCOL_EXPORT ExecuteCommandRequest : public Request<
QJsonValue, LanguageClientNull, ExecuteCommandParams> QJsonValue, std::nullptr_t, ExecuteCommandParams>
{ {
public: public:
ExecuteCommandRequest(const ExecuteCommandParams &params = ExecuteCommandParams()); ExecuteCommandRequest(const ExecuteCommandParams &params = ExecuteCommandParams());
@@ -254,7 +254,7 @@ public:
}; };
class LANGUAGESERVERPROTOCOL_EXPORT ApplyWorkspaceEditRequest : public Request< class LANGUAGESERVERPROTOCOL_EXPORT ApplyWorkspaceEditRequest : public Request<
ApplyWorkspaceEditResponse, LanguageClientNull, ApplyWorkspaceEditParams> ApplyWorkspaceEditResponse, std::nullptr_t, ApplyWorkspaceEditParams>
{ {
public: public:
ApplyWorkspaceEditRequest(const ApplyWorkspaceEditParams &params = ApplyWorkspaceEditParams()); ApplyWorkspaceEditRequest(const ApplyWorkspaceEditParams &params = ApplyWorkspaceEditParams());

View File

@@ -617,7 +617,7 @@ void BaseClient::handleMethod(const QString &method, MessageId id, const IConten
} else { } else {
ShowMessageRequest::Response response; ShowMessageRequest::Response response;
response.setId(request->id()); response.setId(request->id());
ResponseError<LanguageClientNull> error; ResponseError<std::nullptr_t> error;
const QString errorMessage = const QString errorMessage =
QString("Could not parse ShowMessageRequest parameter of '%1': \"%2\"") QString("Could not parse ShowMessageRequest parameter of '%1': \"%2\"")
.arg(request->id().toString(), .arg(request->id().toString(),
@@ -696,9 +696,9 @@ void BaseClient::intializeCallback(const InitializeRequest::Response &initRespon
void BaseClient::shutDownCallback(const ShutdownRequest::Response &shutdownResponse) void BaseClient::shutDownCallback(const ShutdownRequest::Response &shutdownResponse)
{ {
QTC_ASSERT(m_state == ShutdownRequested, return); QTC_ASSERT(m_state == ShutdownRequested, return);
optional<ResponseError<JsonObject>> errorValue = shutdownResponse.error(); optional<ShutdownRequest::Response::Error> errorValue = shutdownResponse.error();
if (errorValue.has_value()) { if (errorValue.has_value()) {
ResponseError<JsonObject> error = errorValue.value(); ShutdownRequest::Response::Error error = errorValue.value();
qDebug() << error; qDebug() << error;
return; return;
} }