BaseFileFilter: Make searching in paths easier

Allow searching for TextEditor/main.cpp by typing
either "text*main" or simply "text main".

Fixes: QTCREATORBUG-22546
Change-Id: Ica6fbd67c98381a8b2d13801e93ef7dba7f367a4
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
Andre Hartmann
2019-07-13 06:52:11 +02:00
committed by André Hartmann
parent e9272d848b
commit 370511b5e4

View File

@@ -111,7 +111,8 @@ static int matchLevelFor(const QRegularExpressionMatch &match, const QString &ma
QList<LocatorFilterEntry> BaseFileFilter::matchesFor(QFutureInterface<LocatorFilterEntry> &future, const QString &origEntry)
{
QList<LocatorFilterEntry> entries[4];
const QString entry = QDir::fromNativeSeparators(origEntry);
// If search string contains spaces, treat them as wildcard '*' and search in full path
const QString entry = QDir::fromNativeSeparators(origEntry).replace(' ', '*');
const EditorManager::FilePathInfo fp = EditorManager::splitLineAndColumnNumber(entry);
const QRegularExpression regexp = createRegExp(fp.filePath);
@@ -119,12 +120,15 @@ QList<LocatorFilterEntry> BaseFileFilter::matchesFor(QFutureInterface<LocatorFil
d->m_current.clear(); // free memory
return entries[0];
}
const QChar pathSeparator('/');
const bool hasPathSeparator = fp.filePath.contains(pathSeparator);
auto containsPathSeparator = [](const QString &candidate) {
return candidate.contains('/') || candidate.contains('*');
};
const bool hasPathSeparator = containsPathSeparator(fp.filePath);
const bool containsPreviousEntry = !d->m_current.previousEntry.isEmpty()
&& fp.filePath.contains(d->m_current.previousEntry);
const bool pathSeparatorAdded = !d->m_current.previousEntry.contains(pathSeparator)
&& fp.filePath.contains(pathSeparator);
const bool pathSeparatorAdded = !containsPathSeparator(d->m_current.previousEntry)
&& hasPathSeparator;
const bool searchInPreviousResults = !d->m_current.forceNewSearchList && containsPreviousEntry
&& !pathSeparatorAdded;
if (searchInPreviousResults)