diff options
author | David Schulz <david.schulz@qt.io> | 2022-11-10 13:33:25 +0100 |
---|---|---|
committer | David Schulz <david.schulz@qt.io> | 2022-11-11 10:11:33 +0000 |
commit | 5eca1ff8736f37abb51179b893d172038b5f715d (patch) | |
tree | 88b434e053c6e2ca1f0de49386ef4a4e89f33328 /src/plugins/texteditor/codeassist/codeassistant.cpp | |
parent | 63a8218680c6f909208cddfa18d92d734cc40df8 (diff) | |
download | qt-creator-5eca1ff8736f37abb51179b893d172038b5f715d.tar.gz |
LanguageClient: use internal filtering if we got all completions
... at the current position. This reduces the amount of requested
completions.
Change-Id: I0fa35269bc123513217e3b3abd2c921bd92d8d10
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'src/plugins/texteditor/codeassist/codeassistant.cpp')
-rw-r--r-- | src/plugins/texteditor/codeassist/codeassistant.cpp | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/src/plugins/texteditor/codeassist/codeassistant.cpp b/src/plugins/texteditor/codeassist/codeassistant.cpp index 819a68d64a..c38c0a6724 100644 --- a/src/plugins/texteditor/codeassist/codeassistant.cpp +++ b/src/plugins/texteditor/codeassist/codeassistant.cpp @@ -51,6 +51,7 @@ public: void displayProposal(IAssistProposal *newProposal, AssistReason reason); bool isDisplayingProposal() const; bool isWaitingForProposal() const; + QString proposalPrefix() const; void notifyChange(); bool hasContext() const; @@ -134,7 +135,7 @@ void CodeAssistantPrivate::invoke(AssistKind kind, IAssistProvider *provider) stopAutomaticProposalTimer(); if (isDisplayingProposal() && m_assistKind == kind && !m_proposal->isFragile() - && m_proposal->supportsPrefix()) { + && m_proposal->supportsPrefixFiltering(proposalPrefix())) { m_proposalWidget->setReason(ExplicitlyInvoked); m_proposalWidget->updateProposal(m_editorWidget->textAt( m_proposal->basePosition(), @@ -426,6 +427,14 @@ bool CodeAssistantPrivate::isWaitingForProposal() const return m_requestRunner != nullptr || m_asyncProcessor != nullptr; } +QString CodeAssistantPrivate::proposalPrefix() const +{ + if (!isDisplayingProposal()) + return {}; + return m_editorWidget->textAt(m_proposal->basePosition(), + m_editorWidget->position() - m_proposal->basePosition()); +} + void CodeAssistantPrivate::invalidateCurrentRequestData() { m_asyncProcessor = nullptr; @@ -468,14 +477,15 @@ void CodeAssistantPrivate::notifyChange() QTC_ASSERT(m_proposal, return); if (m_editorWidget->position() < m_proposal->basePosition()) { destroyContext(); - } else if (m_proposal->supportsPrefix()) { - m_proposalWidget->updateProposal( - m_editorWidget->textAt(m_proposal->basePosition(), - m_editorWidget->position() - m_proposal->basePosition())); - if (!isDisplayingProposal()) - requestActivationCharProposal(); } else { - requestProposal(m_proposal->reason(), m_assistKind, m_requestProvider, true); + const QString prefix = proposalPrefix(); + if (m_proposal->supportsPrefixFiltering(prefix)) { + m_proposalWidget->updateProposal(prefix); + if (!isDisplayingProposal()) + requestActivationCharProposal(); + } else { + requestProposal(m_proposal->reason(), m_assistKind, m_requestProvider, true); + } } } } |