LanguageClient: Print json before error message

This saves a roundtrip when reporting bugreports where an unexpected
error shows up.

Change-Id: Id2e7cbd86a456ea794f0791199077f931cab03c5
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
David Schulz
2020-02-10 14:28:08 +01:00
parent e3c7b72003
commit 7cba257299

View File

@@ -1055,32 +1055,40 @@ void Client::handleResponse(const MessageId &id, const QByteArray &content, QTex
void Client::handleMethod(const QString &method, MessageId id, const IContent *content)
{
ErrorHierarchy error;
bool paramsValid = true;
auto logError = [&](const JsonObject &content) {
log(QJsonDocument(content).toJson(QJsonDocument::Indented) + '\n'
+ tr("Invalid parameter in \"%1\": %2").arg(method, error.toString()),
Core::MessageManager::Flash);
};
if (method == PublishDiagnosticsNotification::methodName) {
auto params = dynamic_cast<const PublishDiagnosticsNotification *>(content)->params().value_or(PublishDiagnosticsParams());
paramsValid = params.isValid(&error);
if (paramsValid)
if (params.isValid(&error))
handleDiagnostics(params);
else
logError(params);
} else if (method == LogMessageNotification::methodName) {
auto params = dynamic_cast<const LogMessageNotification *>(content)->params().value_or(LogMessageParams());
paramsValid = params.isValid(&error);
if (paramsValid)
if (params.isValid(&error))
log(params, Core::MessageManager::Flash);
else
logError(params);
} else if (method == SemanticHighlightNotification::methodName) {
auto params = dynamic_cast<const SemanticHighlightNotification *>(content)->params().value_or(SemanticHighlightingParams());
paramsValid = params.isValid(&error);
if (paramsValid)
if (params.isValid(&error))
handleSemanticHighlight(params);
else
logError(params);
} else if (method == ShowMessageNotification::methodName) {
auto params = dynamic_cast<const ShowMessageNotification *>(content)->params().value_or(ShowMessageParams());
paramsValid = params.isValid(&error);
if (paramsValid)
if (params.isValid(&error))
log(params);
else
logError(params);
} else if (method == ShowMessageRequest::methodName) {
auto request = dynamic_cast<const ShowMessageRequest *>(content);
auto params = request->params().value_or(ShowMessageRequestParams());
paramsValid = params.isValid(&error);
if (paramsValid) {
if (params.isValid(&error)) {
showMessageBox(params, request->id());
} else {
ShowMessageRequest::Response response(request->id());
@@ -1095,19 +1103,22 @@ void Client::handleMethod(const QString &method, MessageId id, const IContent *c
}
} else if (method == RegisterCapabilityRequest::methodName) {
auto params = dynamic_cast<const RegisterCapabilityRequest *>(content)->params().value_or(RegistrationParams());
paramsValid = params.isValid(&error);
if (paramsValid)
if (params.isValid(&error))
m_dynamicCapabilities.registerCapability(params.registrations());
else
logError(params);
} else if (method == UnregisterCapabilityRequest::methodName) {
auto params = dynamic_cast<const UnregisterCapabilityRequest *>(content)->params().value_or(UnregistrationParams());
paramsValid = params.isValid(&error);
if (paramsValid)
if (params.isValid(&error))
m_dynamicCapabilities.unregisterCapability(params.unregistrations());
else
logError(params);
} else if (method == ApplyWorkspaceEditRequest::methodName) {
auto params = dynamic_cast<const ApplyWorkspaceEditRequest *>(content)->params().value_or(ApplyWorkspaceEditParams());
paramsValid = params.isValid(&error);
if (paramsValid)
if (params.isValid(&error))
applyWorkspaceEdit(params.edit());
else
logError(params);
} else if (method == WorkSpaceFolderRequest::methodName) {
WorkSpaceFolderRequest::Response response(dynamic_cast<const WorkSpaceFolderRequest *>(content)->id());
const QList<ProjectExplorer::Project *> projects
@@ -1130,10 +1141,6 @@ void Client::handleMethod(const QString &method, MessageId id, const IContent *c
response.setError(error);
sendContent(response);
}
if (!paramsValid) {
log(tr("Invalid parameter in \"%1\": %2").arg(method, error.toString()),
Core::MessageManager::Flash);
}
delete content;
}
@@ -1210,8 +1217,10 @@ void Client::initializeCallback(const InitializeRequest::Response &initResponse)
} else {
const InitializeResult &result = _result.value();
ErrorHierarchy error;
if (!result.isValid(&error)) // continue on ill formed result
log(tr("Initialize result is not valid: ") + error.toString());
if (!result.isValid(&error)) { // continue on ill formed result
log(QJsonDocument(result).toJson(QJsonDocument::Indented) + '\n'
+ tr("Initialize result is not valid: ") + error.toString());
}
m_serverCapabilities = result.capabilities().value_or(ServerCapabilities());
}