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)
qSort(m_completions.begin(), m_completions.end(), completionItemLessThan);
sortCompletion(m_completions);
// always remove duplicates
m_completions = removeDuplicates(m_completions);

View File

@@ -1074,13 +1074,18 @@ static bool qmlCompletionItemLessThan(const TextEditor::CompletionItem &l, const
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> completionItems;
completions(&completionItems);
qStableSort(completionItems.begin(), completionItems.end(), qmlCompletionItemLessThan);
sortCompletion(completionItems);
// Remove duplicates
QString lastKey;

View File

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

View File

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

View File

@@ -139,6 +139,8 @@ public:
*/
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.
*/
virtual void cleanup() = 0;