forked from qt-creator/qt-creator
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:
committed by
André Hartmann
parent
e9272d848b
commit
370511b5e4
@@ -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> BaseFileFilter::matchesFor(QFutureInterface<LocatorFilterEntry> &future, const QString &origEntry)
|
||||||
{
|
{
|
||||||
QList<LocatorFilterEntry> entries[4];
|
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 EditorManager::FilePathInfo fp = EditorManager::splitLineAndColumnNumber(entry);
|
||||||
|
|
||||||
const QRegularExpression regexp = createRegExp(fp.filePath);
|
const QRegularExpression regexp = createRegExp(fp.filePath);
|
||||||
@@ -119,12 +120,15 @@ QList<LocatorFilterEntry> BaseFileFilter::matchesFor(QFutureInterface<LocatorFil
|
|||||||
d->m_current.clear(); // free memory
|
d->m_current.clear(); // free memory
|
||||||
return entries[0];
|
return entries[0];
|
||||||
}
|
}
|
||||||
const QChar pathSeparator('/');
|
auto containsPathSeparator = [](const QString &candidate) {
|
||||||
const bool hasPathSeparator = fp.filePath.contains(pathSeparator);
|
return candidate.contains('/') || candidate.contains('*');
|
||||||
|
};
|
||||||
|
|
||||||
|
const bool hasPathSeparator = containsPathSeparator(fp.filePath);
|
||||||
const bool containsPreviousEntry = !d->m_current.previousEntry.isEmpty()
|
const bool containsPreviousEntry = !d->m_current.previousEntry.isEmpty()
|
||||||
&& fp.filePath.contains(d->m_current.previousEntry);
|
&& fp.filePath.contains(d->m_current.previousEntry);
|
||||||
const bool pathSeparatorAdded = !d->m_current.previousEntry.contains(pathSeparator)
|
const bool pathSeparatorAdded = !containsPathSeparator(d->m_current.previousEntry)
|
||||||
&& fp.filePath.contains(pathSeparator);
|
&& hasPathSeparator;
|
||||||
const bool searchInPreviousResults = !d->m_current.forceNewSearchList && containsPreviousEntry
|
const bool searchInPreviousResults = !d->m_current.forceNewSearchList && containsPreviousEntry
|
||||||
&& !pathSeparatorAdded;
|
&& !pathSeparatorAdded;
|
||||||
if (searchInPreviousResults)
|
if (searchInPreviousResults)
|
||||||
|
Reference in New Issue
Block a user