CppTools: Locator: Match also against qualified names

If the user input contains "::", match against the qualified symbol
name. Otherwise, as before, match against the unqualified symbol name.

This applies to the function and class filters and allows to narrow down
the results by using a namespace prefix, e.g. "c core::*category".

Change-Id: Id152f412740e27f2f2d001dc7008dba8a92a37ce
Reviewed-by: David Schulz <david.schulz@digia.com>
Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
This commit is contained in:
Nikolai Kosjar
2013-08-21 16:28:12 +02:00
parent e8801167aa
commit aa1aeeafa1
7 changed files with 37 additions and 7 deletions

View File

@@ -47,8 +47,11 @@ CppClassesFilter::~CppClassesFilter()
{
}
QString CppClassesFilter::stringToMatchUserInputAgainst(const ModelItemInfo &info)
QString CppClassesFilter::stringToMatchUserInputAgainst(const ModelItemInfo &info,
bool userInputContainsColonColon)
{
if (userInputContainsColonColon)
return info.scopedSymbolName();
return info.symbolName;
}

View File

@@ -44,7 +44,8 @@ public:
~CppClassesFilter();
private:
QString stringToMatchUserInputAgainst(const ModelItemInfo &info);
QString stringToMatchUserInputAgainst(const ModelItemInfo &info,
bool userInputContainsColonColon);
Locator::FilterEntry filterEntryFromModelItemInfo(const ModelItemInfo &info);
};

View File

@@ -46,8 +46,11 @@ CppFunctionsFilter::~CppFunctionsFilter()
{
}
QString CppFunctionsFilter::stringToMatchUserInputAgainst(const CppTools::ModelItemInfo &info)
QString CppFunctionsFilter::stringToMatchUserInputAgainst(const CppTools::ModelItemInfo &info,
bool userInputContainsColonColon)
{
if (userInputContainsColonColon)
return info.scopedSymbolName();
return info.symbolName;
}

View File

@@ -44,7 +44,8 @@ public:
~CppFunctionsFilter();
private:
QString stringToMatchUserInputAgainst(const ModelItemInfo &info);
QString stringToMatchUserInputAgainst(const ModelItemInfo &info,
bool userInputContainsColonColon);
Locator::FilterEntry filterEntryFromModelItemInfo(const ModelItemInfo &info);
};

View File

@@ -108,8 +108,10 @@ void CppLocatorFilter::onAboutToRemoveFiles(const QStringList &files)
m_searchList.remove(file);
}
QString CppLocatorFilter::stringToMatchUserInputAgainst(const CppTools::ModelItemInfo &info)
QString CppLocatorFilter::stringToMatchUserInputAgainst(const CppTools::ModelItemInfo &info,
bool userInputContainsColonColon)
{
Q_UNUSED(userInputContainsColonColon)
return info.scopedSymbolName();
}
@@ -149,6 +151,7 @@ QList<Locator::FilterEntry> CppLocatorFilter::matchesFor(QFutureInterface<Locato
if (!regexp.isValid())
return goodEntries;
bool hasWildcard = (entry.contains(asterisk) || entry.contains(QLatin1Char('?')));
bool hasColonColon = entry.contains(QLatin1String("::"));
const Qt::CaseSensitivity caseSensitivityForPrefix = caseSensitivity(entry);
QHashIterator<QString, QList<ModelItemInfo> > it(m_searchList);
@@ -160,7 +163,7 @@ QList<Locator::FilterEntry> CppLocatorFilter::matchesFor(QFutureInterface<Locato
const QList<ModelItemInfo> items = it.value();
foreach (const ModelItemInfo &info, items) {
const QString matchString = stringToMatchUserInputAgainst(info);
const QString matchString = stringToMatchUserInputAgainst(info, hasColonColon);
if ((hasWildcard && regexp.exactMatch(matchString))
|| (!hasWildcard && matcher.indexIn(matchString) != -1)) {
const Locator::FilterEntry filterEntry = filterEntryFromModelItemInfo(info);

View File

@@ -63,7 +63,8 @@ private slots:
void onAboutToRemoveFiles(const QStringList &files);
private:
virtual QString stringToMatchUserInputAgainst(const ModelItemInfo &info);
virtual QString stringToMatchUserInputAgainst(const ModelItemInfo &info,
bool userInputContainsColonColon);
virtual Locator::FilterEntry filterEntryFromModelItemInfo(const ModelItemInfo &info);
private:

View File

@@ -180,6 +180,16 @@ void CppToolsPlugin::test_cpplocatorfilters_CppLocatorFilter_data()
<< ResultData(_("myFunction(bool, int)"), _("<anonymous namespace>"))
);
QTest::newRow("CppFunctionsFilter-WithNamespacePrefix")
<< testFile
<< cppFunctionsFilter
<< _("mynamespace::")
<< (QList<ResultData>()
<< ResultData(_("MyClass()"), _("MyNamespace::MyClass"))
<< ResultData(_("function2(bool, int)"), _("MyNamespace::MyClass"))
<< ResultData(_("myFunction(bool, int)"), _("MyNamespace"))
);
QTest::newRow("CppClassesFilter")
<< testFile
<< cppClassesFilter
@@ -190,6 +200,14 @@ void CppToolsPlugin::test_cpplocatorfilters_CppLocatorFilter_data()
<< ResultData(_("MyClass"), _("<anonymous namespace>"))
);
QTest::newRow("CppClassesFilter-WithNamespacePrefix")
<< testFile
<< cppClassesFilter
<< _("mynamespace::")
<< (QList<ResultData>()
<< ResultData(_("MyClass"), _("MyNamespace"))
);
QTest::newRow("CppLocatorFilter")
<< testFile
<< cppLocatorFilter