forked from qt-creator/qt-creator
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:
@@ -219,6 +219,7 @@ public:
|
|||||||
LanguageClientCompletionAssistProcessor(BaseClient *client);
|
LanguageClientCompletionAssistProcessor(BaseClient *client);
|
||||||
TextEditor::IAssistProposal *perform(const TextEditor::AssistInterface *interface) override;
|
TextEditor::IAssistProposal *perform(const TextEditor::AssistInterface *interface) override;
|
||||||
bool running() override;
|
bool running() override;
|
||||||
|
bool needsRestart() const override { return true; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void handleCompletionResponse(const Response<CompletionResult, LanguageClientNull> &response);
|
void handleCompletionResponse(const Response<CompletionResult, LanguageClientNull> &response);
|
||||||
|
|||||||
@@ -245,10 +245,17 @@ void CodeAssistantPrivate::requestProposal(AssistReason reason,
|
|||||||
case IAssistProvider::Asynchronous: {
|
case IAssistProvider::Asynchronous: {
|
||||||
processor->setAsyncCompletionAvailableHandler(
|
processor->setAsyncCompletionAvailableHandler(
|
||||||
[this, reason](IAssistProposal *newProposal){
|
[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();
|
invalidateCurrentRequestData();
|
||||||
displayProposal(newProposal, reason);
|
displayProposal(newProposal, reason);
|
||||||
|
|
||||||
emit q->finished();
|
emit q->finished();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// If there is a proposal, nothing asynchronous happened...
|
// If there is a proposal, nothing asynchronous happened...
|
||||||
|
|||||||
@@ -50,6 +50,7 @@ public:
|
|||||||
void setAsyncCompletionAvailableHandler(const AsyncCompletionsAvailableHandler &finalizer);
|
void setAsyncCompletionAvailableHandler(const AsyncCompletionsAvailableHandler &finalizer);
|
||||||
|
|
||||||
virtual bool running() { return false; }
|
virtual bool running() { return false; }
|
||||||
|
virtual bool needsRestart() const { return false; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
AsyncCompletionsAvailableHandler m_asyncCompletionsAvailableHandler;
|
AsyncCompletionsAvailableHandler m_asyncCompletionsAvailableHandler;
|
||||||
|
|||||||
Reference in New Issue
Block a user