From 13af74a4e8e5603e53d7af1cb8b0502193a3359a Mon Sep 17 00:00:00 2001 From: David Schulz Date: Fri, 8 Jul 2022 13:07:48 +0200 Subject: [PATCH] LanguageClient: remove fragile flag from lsp proposals Those proposals are not fragile anymore since they reuse the old completion widget. This fixes vanishing of none idle editor completions on backspace if there are less than 3 characters to complete. Additionally this removes the double completion request if there are more than 3 characters typed in. Change-Id: Id47d341adf954dfaaaeb70c17f6774ba38cc8bdf Reviewed-by: Christian Kandeler Reviewed-by: Christian Stenger --- .../languageclient/languageclientcompletionassist.cpp | 1 - src/plugins/texteditor/codeassist/codeassistant.cpp | 7 +++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/plugins/languageclient/languageclientcompletionassist.cpp b/src/plugins/languageclient/languageclientcompletionassist.cpp index 0ab76a10c07..baac3b007e2 100644 --- a/src/plugins/languageclient/languageclientcompletionassist.cpp +++ b/src/plugins/languageclient/languageclientcompletionassist.cpp @@ -447,7 +447,6 @@ void LanguageClientCompletionAssistProcessor::handleCompletionResponse( model); proposal->m_document = m_document; proposal->m_pos = m_pos; - proposal->setFragile(true); proposal->setSupportsPrefix(false); setAsyncProposalAvailable(proposal); m_client->removeAssistProcessor(this); diff --git a/src/plugins/texteditor/codeassist/codeassistant.cpp b/src/plugins/texteditor/codeassist/codeassistant.cpp index 11434f83f46..6613042c52b 100644 --- a/src/plugins/texteditor/codeassist/codeassistant.cpp +++ b/src/plugins/texteditor/codeassist/codeassistant.cpp @@ -155,7 +155,8 @@ void CodeAssistantPrivate::invoke(AssistKind kind, IAssistProvider *provider) stopAutomaticProposalTimer(); - if (isDisplayingProposal() && m_assistKind == kind && !m_proposal->isFragile()) { + if (isDisplayingProposal() && m_assistKind == kind && !m_proposal->isFragile() + && m_proposal->supportsPrefix()) { m_proposalWidget->setReason(ExplicitlyInvoked); m_proposalWidget->updateProposal(m_editorWidget->textAt( m_proposal->basePosition(), @@ -324,8 +325,10 @@ void CodeAssistantPrivate::displayProposal(IAssistProposal *newProposal, AssistR // TODO: The proposal should own the model until someone takes it explicitly away. QScopedPointer proposalCandidate(newProposal); - if (isDisplayingProposal() && !m_proposal->isFragile()) + if (isDisplayingProposal() && !m_proposal->isFragile() + && !m_proposalWidget->supportsModelUpdate(proposalCandidate->id())) { return; + } int basePosition = proposalCandidate->basePosition(); if (m_editorWidget->position() < basePosition) {