diff options
author | David Schulz <david.schulz@qt.io> | 2020-06-17 14:15:13 +0200 |
---|---|---|
committer | David Schulz <david.schulz@qt.io> | 2020-06-22 04:23:06 +0000 |
commit | e323529b3c9bd8344367ddfb87ba5114edd374d7 (patch) | |
tree | d09307a450163d4876c2b4f50e820ef83a85e9c2 /src/plugins/languageclient/languageclientcompletionassist.cpp | |
parent | 92a4c0d38a007f778893f7b971f747e1a803eac3 (diff) |
LSP: Compress document change notifications
Change-Id: Iaf6cb99784f4e1ed1291ace1f4cc18cf6af88672
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Diffstat (limited to 'src/plugins/languageclient/languageclientcompletionassist.cpp')
-rw-r--r-- | src/plugins/languageclient/languageclientcompletionassist.cpp | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/src/plugins/languageclient/languageclientcompletionassist.cpp b/src/plugins/languageclient/languageclientcompletionassist.cpp index 8a279b0dac0..0b38b42edc9 100644 --- a/src/plugins/languageclient/languageclientcompletionassist.cpp +++ b/src/plugins/languageclient/languageclientcompletionassist.cpp @@ -274,6 +274,7 @@ class LanguageClientCompletionAssistProcessor : public IAssistProcessor { public: LanguageClientCompletionAssistProcessor(Client *client); + ~LanguageClientCompletionAssistProcessor() override; IAssistProposal *perform(const AssistInterface *interface) override; bool running() override; bool needsRestart() const override { return true; } @@ -285,6 +286,7 @@ private: QPointer<QTextDocument> m_document; QPointer<Client> m_client; Utils::optional<MessageId> m_currentRequest; + QMetaObject::Connection m_postponedUpdateConnection; int m_pos = -1; }; @@ -292,6 +294,11 @@ LanguageClientCompletionAssistProcessor::LanguageClientCompletionAssistProcessor : m_client(client) { } +LanguageClientCompletionAssistProcessor::~LanguageClientCompletionAssistProcessor() +{ + QTC_ASSERT(!running(), cancel()); +} + static QString assistReasonString(AssistReason reason) { switch (reason) { @@ -315,7 +322,20 @@ IAssistProposal *LanguageClientCompletionAssistProcessor::perform(const AssistIn ++delta; if (delta < 3) return nullptr; + if (m_client->documentUpdatePostponed(interface->fileName())) { + m_postponedUpdateConnection + = QObject::connect(m_client, + &Client::documentUpdated, + [this, interface](TextEditor::TextDocument *document) { + if (document->filePath() + == Utils::FilePath::fromString(interface->fileName())) + perform(interface); + }); + return nullptr; + } } + if (m_postponedUpdateConnection) + QObject::disconnect(m_postponedUpdateConnection); CompletionRequest completionRequest; CompletionParams::CompletionContext context; if (interface->reason() == ActivationCharacter) { @@ -353,15 +373,17 @@ IAssistProposal *LanguageClientCompletionAssistProcessor::perform(const AssistIn bool LanguageClientCompletionAssistProcessor::running() { - return m_currentRequest.has_value(); + return m_currentRequest.has_value() || m_postponedUpdateConnection; } void LanguageClientCompletionAssistProcessor::cancel() { - if (running()) { + if (m_currentRequest.has_value()) { m_client->cancelRequest(m_currentRequest.value()); m_client->removeAssistProcessor(this); m_currentRequest.reset(); + } else if (m_postponedUpdateConnection) { + QObject::disconnect(m_postponedUpdateConnection); } } |