summaryrefslogtreecommitdiff
path: root/src/plugins/qmljseditor/qmljscompletionassist.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/qmljseditor/qmljscompletionassist.cpp')
-rw-r--r--src/plugins/qmljseditor/qmljscompletionassist.cpp17
1 files changed, 13 insertions, 4 deletions
diff --git a/src/plugins/qmljseditor/qmljscompletionassist.cpp b/src/plugins/qmljseditor/qmljscompletionassist.cpp
index 65a80f6d29..16661622d3 100644
--- a/src/plugins/qmljseditor/qmljscompletionassist.cpp
+++ b/src/plugins/qmljseditor/qmljscompletionassist.cpp
@@ -985,13 +985,16 @@ const SemanticInfo &QmlJSCompletionAssistInterface::semanticInfo() const
namespace {
-struct QmlJSLessThan
+class QmlJSLessThan
{
+public:
+ QmlJSLessThan(const QString &searchString) : m_searchString(searchString)
+ { }
bool operator() (const BasicProposalItem *a, const BasicProposalItem *b)
{
if (a->order() != b->order())
return a->order() > b->order();
- else if (a->text().isEmpty())
+ else if (a->text().isEmpty() && ! b->text().isEmpty())
return true;
else if (b->text().isEmpty())
return false;
@@ -1001,8 +1004,14 @@ struct QmlJSLessThan
return false;
else if (a->text().at(0).isLower() && b->text().at(0).isUpper())
return true;
+ int m1 = PersistentTrie::matchStrength(m_searchString, a->text());
+ int m2 = PersistentTrie::matchStrength(m_searchString, b->text());
+ if (m1 != m2)
+ return m1 > m2;
return a->text() < b->text();
}
+private:
+ QString m_searchString;
};
} // Anonymous
@@ -1023,9 +1032,9 @@ void QmlJSAssistProposalModel::filter(const QString &prefix)
m_currentItems = newCurrentItems;
}
-void QmlJSAssistProposalModel::sort(const QString &)
+void QmlJSAssistProposalModel::sort(const QString &prefix)
{
- qSort(currentItems().first, currentItems().second, QmlJSLessThan());
+ qSort(currentItems().first, currentItems().second, QmlJSLessThan(prefix));
}
bool QmlJSAssistProposalModel::keepPerfectMatch(TextEditor::AssistReason reason) const