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>
This commit is contained in:
David Schulz
2022-11-10 13:33:25 +01:00
parent 63a8218680
commit 5eca1ff873
4 changed files with 35 additions and 16 deletions

View File

@@ -411,9 +411,11 @@ void LanguageClientCompletionAssistProcessor::handleCompletionResponse(
}
QList<CompletionItem> items;
bool isComplete = false;
if (std::holds_alternative<CompletionList>(*result)) {
const auto &list = std::get<CompletionList>(*result);
items = list.items().value_or(QList<CompletionItem>());
isComplete = !list.isIncomplete();
} else if (std::holds_alternative<QList<CompletionItem>>(*result)) {
items = std::get<QList<CompletionItem>>(*result);
}
@@ -428,7 +430,12 @@ void LanguageClientCompletionAssistProcessor::handleCompletionResponse(
model);
proposal->m_document = m_assistInterface->textDocument();
proposal->m_pos = m_pos;
proposal->setSupportsPrefix(false);
const QString completePrefix = Utils::Text::textAt(QTextCursor(m_document),
m_basePos,
m_pos - m_basePos);
proposal->setPrefixChecker([isComplete, completePrefix](const QString &candidate) {
return isComplete && candidate.startsWith(completePrefix);
});
setAsyncProposalAvailable(proposal);
m_client->removeAssistProcessor(this);
qCDebug(LOGLSPCOMPLETION) << QTime::currentTime() << " : "