diff options
author | David Schulz <david.schulz@qt.io> | 2022-06-14 09:53:26 +0200 |
---|---|---|
committer | David Schulz <david.schulz@qt.io> | 2022-06-15 12:11:20 +0000 |
commit | d80a713b894355f26048a54554ac125124f30e27 (patch) | |
tree | 93a1a76e0a7303e4a1f3aa684bd5c39fd7aebb6b | |
parent | a7d8698bf212fb7751069941c44719eb613dc40c (diff) | |
download | qt-creator-d80a713b894355f26048a54554ac125124f30e27.tar.gz |
LanguageClient: move relevant snippets to the front
If a snippet starts with the current prefix move it to the front of the
proposed completions.
Fixes: QTCREATORBUG-27566
Change-Id: I568d34e4da596a8cf4f08eb88eb1ee865edbed70
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
-rw-r--r-- | src/plugins/languageclient/languageclientcompletionassist.cpp | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/src/plugins/languageclient/languageclientcompletionassist.cpp b/src/plugins/languageclient/languageclientcompletionassist.cpp index e9e8ad6453..e10729987c 100644 --- a/src/plugins/languageclient/languageclientcompletionassist.cpp +++ b/src/plugins/languageclient/languageclientcompletionassist.cpp @@ -233,7 +233,7 @@ public: // GenericProposalModel interface bool containsDuplicates() const override { return false; } bool isSortable(const QString &/*prefix*/) const override; - void sort(const QString &/*prefix*/) override; + void sort(const QString &prefix) override; bool supportsPrefixExpansion() const override { return false; } QList<AssistProposalItemInterface *> items() const { return m_currentItems; } @@ -247,19 +247,21 @@ bool LanguageClientCompletionModel::isSortable(const QString &) const }); } -void LanguageClientCompletionModel::sort(const QString &/*prefix*/) +void LanguageClientCompletionModel::sort(const QString &prefix) { std::sort(m_currentItems.begin(), m_currentItems.end(), - [] (AssistProposalItemInterface *a, AssistProposalItemInterface *b){ + [&prefix] (AssistProposalItemInterface *a, AssistProposalItemInterface *b){ const auto lca = dynamic_cast<LanguageClientCompletionItem *>(a); const auto lcb = dynamic_cast<LanguageClientCompletionItem *>(b); if (!lca && !lcb) return a->text() < b->text(); if (lca && lcb) return *lca < *lcb; - if (lca && !lcb) - return true; - return false; + if (prefix.isEmpty()) + return lca && !lcb; + if (!lca) + return a->text().toLower().startsWith(prefix.toLower()); + return !b->text().toLower().startsWith(prefix.toLower()); }); } |