QmljsFunctionFilter: Simplify priority handling

Change-Id: Ib3cb7f597256a3d19cc6cab3a2efa3961ac0c478
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
Andre Hartmann
2019-07-14 07:25:55 +02:00
committed by André Hartmann
parent 56948e75d8
commit 1f82f86167

View File

@@ -32,6 +32,8 @@
#include <QRegularExpression> #include <QRegularExpression>
#include <numeric>
using namespace QmlJSTools::Internal; using namespace QmlJSTools::Internal;
Q_DECLARE_METATYPE(LocatorData::Entry) Q_DECLARE_METATYPE(LocatorData::Entry)
@@ -56,14 +58,13 @@ QList<Core::LocatorFilterEntry> FunctionFilter::matchesFor(
QFutureInterface<Core::LocatorFilterEntry> &future, QFutureInterface<Core::LocatorFilterEntry> &future,
const QString &entry) const QString &entry)
{ {
QList<Core::LocatorFilterEntry> goodEntries; enum { Best = 0, Better, Good, EntryNumber };
QList<Core::LocatorFilterEntry> betterEntries; QList<Core::LocatorFilterEntry> entries[EntryNumber];
QList<Core::LocatorFilterEntry> bestEntries;
const Qt::CaseSensitivity caseSensitivityForPrefix = caseSensitivity(entry); const Qt::CaseSensitivity caseSensitivityForPrefix = caseSensitivity(entry);
const QRegularExpression regexp = createRegExp(entry); const QRegularExpression regexp = createRegExp(entry);
if (!regexp.isValid()) if (!regexp.isValid())
return goodEntries; return {};
const QHash<QString, QList<LocatorData::Entry> > entries = m_data->entries(); const QHash<QString, QList<LocatorData::Entry> > entries = m_data->entries();
for (const QList<LocatorData::Entry> &items : entries) { for (const QList<LocatorData::Entry> &items : entries) {
@@ -82,25 +83,21 @@ QList<Core::LocatorFilterEntry> FunctionFilter::matchesFor(
filterEntry.highlightInfo = highlightInfo(match); filterEntry.highlightInfo = highlightInfo(match);
if (filterEntry.displayName.startsWith(entry, caseSensitivityForPrefix)) if (filterEntry.displayName.startsWith(entry, caseSensitivityForPrefix))
bestEntries.append(filterEntry); entries[Best].append(filterEntry);
else if (filterEntry.displayName.contains(entry, caseSensitivityForPrefix)) else if (filterEntry.displayName.contains(entry, caseSensitivityForPrefix))
betterEntries.append(filterEntry); entries[Better].append(filterEntry);
else else
goodEntries.append(filterEntry); entries[Good].append(filterEntry);
} }
} }
} }
if (goodEntries.size() < 1000) for (auto &entry : entries) {
Utils::sort(goodEntries, Core::LocatorFilterEntry::compareLexigraphically); if (entry.size() < 1000)
if (betterEntries.size() < 1000) Utils::sort(entry, Core::LocatorFilterEntry::compareLexigraphically);
Utils::sort(betterEntries, Core::LocatorFilterEntry::compareLexigraphically); }
if (bestEntries.size() < 1000)
Utils::sort(bestEntries, Core::LocatorFilterEntry::compareLexigraphically);
bestEntries += betterEntries; return std::accumulate(std::begin(entries), std::end(entries), QList<Core::LocatorFilterEntry>());
bestEntries += goodEntries;
return bestEntries;
} }
void FunctionFilter::accept(Core::LocatorFilterEntry selection, void FunctionFilter::accept(Core::LocatorFilterEntry selection,