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<
LanguageClientNull, LanguageClientNull, RegistrationParams>
std::nullptr_t, std::nullptr_t, RegistrationParams>
{
public:
RegisterCapabilityRequest(const RegistrationParams &params = 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 &params = UnregistrationParams());

View File

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

View File

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

View File

@@ -42,8 +42,6 @@
namespace LanguageServerProtocol {
using LanguageClientNull = JsonObject;
class LANGUAGESERVERPROTOCOL_EXPORT JsonRpcMessage : public IContent
{
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>
class ResponseError : public JsonObject
{

View File

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

View File

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

View File

@@ -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<LanguageClientNull>
class LANGUAGESERVERPROTOCOL_EXPORT ExitNotification : public Notification<std::nullptr_t>
{
public:
ExitNotification();

View File

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

View File

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

View File

@@ -617,7 +617,7 @@ void BaseClient::handleMethod(const QString &method, MessageId id, const IConten
} else {
ShowMessageRequest::Response response;
response.setId(request->id());
ResponseError<LanguageClientNull> error;
ResponseError<std::nullptr_t> 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<ResponseError<JsonObject>> errorValue = shutdownResponse.error();
optional<ShutdownRequest::Response::Error> errorValue = shutdownResponse.error();
if (errorValue.has_value()) {
ResponseError<JsonObject> error = errorValue.value();
ShutdownRequest::Response::Error error = errorValue.value();
qDebug() << error;
return;
}