Locator: Use extra info as secondary sorting criterion for C++

... classes and functions.
The extra info is usually the scope or the file, so this effectively adds
some helpful grouping.

Fixes: QTCREATORBUG-2538
Change-Id: I2404fee1df88fc51871a72db0dcc9c75d6ba6dcb
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
Christian Kandeler
2021-02-04 12:53:20 +01:00
parent 319300aa6c
commit 84865016ea
2 changed files with 20 additions and 15 deletions

View File

@@ -97,7 +97,12 @@ struct LocatorFilterEntry
static bool compareLexigraphically(const Core::LocatorFilterEntry &lhs,
const Core::LocatorFilterEntry &rhs)
{
return lhs.displayName < rhs.displayName;
const int cmp = lhs.displayName.compare(rhs.displayName);
if (cmp < 0)
return true;
if (cmp > 0)
return false;
return lhs.extraInfo < rhs.extraInfo;
}
};

View File

@@ -173,21 +173,21 @@ void CppToolsPlugin::test_cpplocatorfilters_CppLocatorFilter_data()
<< cppFunctionsFilter
<< "function"
<< ResultDataList{
ResultData("functionDefinedInClass(bool, int)",
"<anonymous namespace>::MyClass (file1.cpp)"),
ResultData("functionDefinedInClass(bool, int)", "MyClass (file1.cpp)"),
ResultData("functionDefinedInClass(bool, int)",
"MyNamespace::MyClass (file1.cpp)"),
ResultData("functionDefinedInClass(bool, int)",
ResultData("functionDefinedOutSideClass(char)",
"<anonymous namespace>::MyClass (file1.cpp)"),
ResultData("functionDefinedOutSideClass(char)", "MyClass (file1.cpp)"),
ResultData("functionDefinedOutSideClass(char)",
"MyNamespace::MyClass (file1.cpp)"),
ResultData("functionDefinedOutSideClass(char)",
"<anonymous namespace>::MyClass (file1.cpp)"),
ResultData("functionDefinedOutSideClassAndNamespace(float)",
"MyNamespace::MyClass (file1.cpp)"),
ResultData("myFunction(bool, int)", testFileShort),
ResultData("myFunction(bool, int)", "<anonymous namespace> (file1.cpp)"),
ResultData("myFunction(bool, int)", "MyNamespace (file1.cpp)"),
ResultData("myFunction(bool, int)", "<anonymous namespace> (file1.cpp)")
ResultData("myFunction(bool, int)", testFileShort)
};
QTest::newRow("CppFunctionsFilter-Sorting")
@@ -206,15 +206,15 @@ void CppToolsPlugin::test_cpplocatorfilters_CppLocatorFilter_data()
<< cppFunctionsFilter
<< "function*bool"
<< ResultDataList{
ResultData("functionDefinedInClass(bool, int)",
"<anonymous namespace>::MyClass (file1.cpp)"),
ResultData("functionDefinedInClass(bool, int)",
"MyClass (file1.cpp)"),
ResultData("functionDefinedInClass(bool, int)",
"MyNamespace::MyClass (file1.cpp)"),
ResultData("functionDefinedInClass(bool, int)",
"<anonymous namespace>::MyClass (file1.cpp)"),
ResultData("myFunction(bool, int)", testFileShort),
ResultData("myFunction(bool, int)", "<anonymous namespace> (file1.cpp)"),
ResultData("myFunction(bool, int)", "MyNamespace (file1.cpp)"),
ResultData("myFunction(bool, int)", "<anonymous namespace> (file1.cpp)")
ResultData("myFunction(bool, int)", testFileShort)
};
QTest::newRow("CppFunctionsFilter-WithNamespacePrefix")
@@ -237,18 +237,18 @@ void CppToolsPlugin::test_cpplocatorfilters_CppLocatorFilter_data()
<< cppFunctionsFilter
<< "MyClass::func"
<< ResultDataList{
ResultData("functionDefinedInClass(bool, int)",
"<anonymous namespace>::MyClass (file1.cpp)"),
ResultData("functionDefinedInClass(bool, int)",
"MyClass (file1.cpp)"),
ResultData("functionDefinedInClass(bool, int)",
"MyNamespace::MyClass (file1.cpp)"),
ResultData("functionDefinedInClass(bool, int)",
ResultData("functionDefinedOutSideClass(char)",
"<anonymous namespace>::MyClass (file1.cpp)"),
ResultData("functionDefinedOutSideClass(char)",
"MyClass (file1.cpp)"),
ResultData("functionDefinedOutSideClass(char)",
"MyNamespace::MyClass (file1.cpp)"),
ResultData("functionDefinedOutSideClass(char)",
"<anonymous namespace>::MyClass (file1.cpp)"),
ResultData("functionDefinedOutSideClassAndNamespace(float)",
"MyNamespace::MyClass (file1.cpp)"),
};
@@ -258,9 +258,9 @@ void CppToolsPlugin::test_cpplocatorfilters_CppLocatorFilter_data()
<< cppClassesFilter
<< "myclass"
<< ResultDataList{
ResultData("MyClass", testFileShort),
ResultData("MyClass", "<anonymous namespace>"),
ResultData("MyClass", "MyNamespace"),
ResultData("MyClass", "<anonymous namespace>")
ResultData("MyClass", testFileShort)
};
QTest::newRow("CppClassesFilter-WithNamespacePrefix")