Sort the completion items when searching for common prefixes.

Reviewed-by: Thorbjørn Lindeijer
This commit is contained in:
Roberto Raggi
2010-12-20 16:10:56 +01:00
parent a73e1f7596
commit 207c295552
5 changed files with 21 additions and 3 deletions

View File

@@ -745,7 +745,7 @@ int CppCodeCompletion::startCompletion(TextEditor::ITextEditable *editor)
} }
if (m_completionOperator != T_EOF_SYMBOL) if (m_completionOperator != T_EOF_SYMBOL)
qSort(m_completions.begin(), m_completions.end(), completionItemLessThan); sortCompletion(m_completions);
// always remove duplicates // always remove duplicates
m_completions = removeDuplicates(m_completions); m_completions = removeDuplicates(m_completions);

View File

@@ -1074,13 +1074,18 @@ static bool qmlCompletionItemLessThan(const TextEditor::CompletionItem &l, const
return l.text < r.text; return l.text < r.text;
} }
void CodeCompletion::sortCompletion(QList<TextEditor::CompletionItem> &completionItems)
{
qStableSort(completionItems.begin(), completionItems.end(), qmlCompletionItemLessThan);
}
QList<TextEditor::CompletionItem> CodeCompletion::getCompletions() QList<TextEditor::CompletionItem> CodeCompletion::getCompletions()
{ {
QList<TextEditor::CompletionItem> completionItems; QList<TextEditor::CompletionItem> completionItems;
completions(&completionItems); completions(&completionItems);
qStableSort(completionItems.begin(), completionItems.end(), qmlCompletionItemLessThan); sortCompletion(completionItems);
// Remove duplicates // Remove duplicates
QString lastKey; QString lastKey;

View File

@@ -77,6 +77,7 @@ public:
virtual void complete(const TextEditor::CompletionItem &item, QChar typedChar); virtual void complete(const TextEditor::CompletionItem &item, QChar typedChar);
virtual bool partiallyComplete(const QList<TextEditor::CompletionItem> &completionItems); virtual bool partiallyComplete(const QList<TextEditor::CompletionItem> &completionItems);
virtual QList<TextEditor::CompletionItem> getCompletions(); virtual QList<TextEditor::CompletionItem> getCompletions();
virtual void sortCompletion(QList<TextEditor::CompletionItem> &completionItems);
virtual void cleanup(); virtual void cleanup();

View File

@@ -127,10 +127,15 @@ QList<CompletionItem> ICompletionCollector::getCompletions()
return uniquelist; return uniquelist;
} }
bool ICompletionCollector::partiallyComplete(const QList<TextEditor::CompletionItem> &completionItems) bool ICompletionCollector::partiallyComplete(const QList<TextEditor::CompletionItem> &items)
{ {
if (! m_d->m_completionSettings.m_partiallyComplete) if (! m_d->m_completionSettings.m_partiallyComplete)
return false; return false;
if (items.size() >= 100)
return false;
QList<TextEditor::CompletionItem> completionItems = items;
sortCompletion(completionItems);
// Compute common prefix // Compute common prefix
QString firstKey = completionItems.first().text; QString firstKey = completionItems.first().text;
@@ -155,6 +160,11 @@ bool ICompletionCollector::partiallyComplete(const QList<TextEditor::CompletionI
return false; return false;
} }
void ICompletionCollector::sortCompletion(QList<TextEditor::CompletionItem> &completionItems)
{
qStableSort(completionItems.begin(), completionItems.end(), &ICompletionCollector::completionItemLessThan);
}
void ICompletionCollector::filter(const QList<TextEditor::CompletionItem> &items, void ICompletionCollector::filter(const QList<TextEditor::CompletionItem> &items,
QList<TextEditor::CompletionItem> *filteredItems, QList<TextEditor::CompletionItem> *filteredItems,
const QString &key) const QString &key)

View File

@@ -139,6 +139,8 @@ public:
*/ */
virtual bool partiallyComplete(const QList<TextEditor::CompletionItem> &completionItems); virtual bool partiallyComplete(const QList<TextEditor::CompletionItem> &completionItems);
virtual void sortCompletion(QList<TextEditor::CompletionItem> &completionItems);
/* Called when it's safe to clean up the completion items. /* Called when it's safe to clean up the completion items.
*/ */
virtual void cleanup() = 0; virtual void cleanup() = 0;