LanguageClient: Do not send document updates when canceling a request

Change-Id: Ied675bb0eca353fd5ffe26540d99bafb6a874c0d
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Christian Kandeler
2021-07-08 12:11:15 +02:00
parent 397f4054c7
commit 4d3ed0fa93
2 changed files with 9 additions and 4 deletions

View File

@@ -400,10 +400,11 @@ 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_clientInterface, return);
QTC_ASSERT(m_state == Initialized, return); QTC_ASSERT(m_state == Initialized, return);
if (sendUpdates == SendDocUpdates::Send)
sendPostponedDocumentUpdates(); sendPostponedDocumentUpdates();
if (Utils::optional<ResponseHandler> responseHandler = content.responseHandler()) if (Utils::optional<ResponseHandler> responseHandler = content.responseHandler())
m_responseHandlers[responseHandler->id] = responseHandler->callback; m_responseHandlers[responseHandler->id] = responseHandler->callback;
@@ -418,7 +419,7 @@ void Client::sendContent(const IContent &content)
void Client::cancelRequest(const MessageId &id) void Client::cancelRequest(const MessageId &id)
{ {
m_responseHandlers.remove(id); m_responseHandlers.remove(id);
sendContent(CancelRequest(CancelParameter(id))); sendContent(CancelRequest(CancelParameter(id)), SendDocUpdates::Ignore);
} }
void Client::closeDocument(TextEditor::TextDocument *document) void Client::closeDocument(TextEditor::TextDocument *document)

View File

@@ -92,7 +92,11 @@ public:
Utils::Id id() const { return m_id; } Utils::Id id() const { return m_id; }
void setName(const QString &name) { m_displayName = name; } void setName(const QString &name) { m_displayName = name; }
QString name() const; 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); void cancelRequest(const LanguageServerProtocol::MessageId &id);
// server state handling // server state handling