LSP: rerequest completion if contents change while processing

Task-number: QTCREATORBUG-21108
Change-Id: I6ca7920e7099dba0ba1bc953a2e6296bd86c1dc1
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
David Schulz
2018-09-20 14:31:50 +02:00
parent 279a11f46b
commit 5719adc47c
3 changed files with 12 additions and 3 deletions

View File

@@ -219,6 +219,7 @@ public:
LanguageClientCompletionAssistProcessor(BaseClient *client);
TextEditor::IAssistProposal *perform(const TextEditor::AssistInterface *interface) override;
bool running() override;
bool needsRestart() const override { return true; }
private:
void handleCompletionResponse(const Response<CompletionResult, LanguageClientNull> &response);

View File

@@ -245,10 +245,17 @@ void CodeAssistantPrivate::requestProposal(AssistReason reason,
case IAssistProvider::Asynchronous: {
processor->setAsyncCompletionAvailableHandler(
[this, reason](IAssistProposal *newProposal){
if (m_asyncProcessor && m_asyncProcessor->needsRestart() && m_receivedContentWhileWaiting) {
delete newProposal;
m_receivedContentWhileWaiting = false;
invalidateCurrentRequestData();
requestProposal(reason, m_assistKind, m_requestProvider);
} else {
invalidateCurrentRequestData();
displayProposal(newProposal, reason);
emit q->finished();
}
});
// If there is a proposal, nothing asynchronous happened...

View File

@@ -50,6 +50,7 @@ public:
void setAsyncCompletionAvailableHandler(const AsyncCompletionsAvailableHandler &finalizer);
virtual bool running() { return false; }
virtual bool needsRestart() const { return false; }
private:
AsyncCompletionsAvailableHandler m_asyncCompletionsAvailableHandler;