From 4d3ed0fa93099f4906969be2b3122f7fd6485c79 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Thu, 8 Jul 2021 12:11:15 +0200 Subject: [PATCH] LanguageClient: Do not send document updates when canceling a request Change-Id: Ied675bb0eca353fd5ffe26540d99bafb6a874c0d Reviewed-by: David Schulz --- src/plugins/languageclient/client.cpp | 7 ++++--- src/plugins/languageclient/client.h | 6 +++++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/plugins/languageclient/client.cpp b/src/plugins/languageclient/client.cpp index a7868be19ab..aaf8d3caba5 100644 --- a/src/plugins/languageclient/client.cpp +++ b/src/plugins/languageclient/client.cpp @@ -400,11 +400,12 @@ void Client::openDocument(TextEditor::TextDocument *document) } } -void Client::sendContent(const IContent &content) +void Client::sendContent(const IContent &content, SendDocUpdates sendUpdates) { QTC_ASSERT(m_clientInterface, return); QTC_ASSERT(m_state == Initialized, return); - sendPostponedDocumentUpdates(); + if (sendUpdates == SendDocUpdates::Send) + sendPostponedDocumentUpdates(); if (Utils::optional responseHandler = content.responseHandler()) m_responseHandlers[responseHandler->id] = responseHandler->callback; QString error; @@ -418,7 +419,7 @@ void Client::sendContent(const IContent &content) void Client::cancelRequest(const MessageId &id) { m_responseHandlers.remove(id); - sendContent(CancelRequest(CancelParameter(id))); + sendContent(CancelRequest(CancelParameter(id)), SendDocUpdates::Ignore); } void Client::closeDocument(TextEditor::TextDocument *document) diff --git a/src/plugins/languageclient/client.h b/src/plugins/languageclient/client.h index 650f0155102..c783e76aafa 100644 --- a/src/plugins/languageclient/client.h +++ b/src/plugins/languageclient/client.h @@ -92,7 +92,11 @@ public: Utils::Id id() const { return m_id; } void setName(const QString &name) { m_displayName = name; } QString name() const; - void sendContent(const LanguageServerProtocol::IContent &content); + + enum class SendDocUpdates { Send, Ignore }; + void sendContent(const LanguageServerProtocol::IContent &content, + SendDocUpdates sendUpdates = SendDocUpdates::Send); + void cancelRequest(const LanguageServerProtocol::MessageId &id); // server state handling