From 84865016eabc42605337b6776d93f3f46b8f2535 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Thu, 4 Feb 2021 12:53:20 +0100 Subject: [PATCH] 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 --- .../coreplugin/locator/ilocatorfilter.h | 7 ++++- .../cpptools/cpplocatorfilter_test.cpp | 28 +++++++++---------- 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/src/plugins/coreplugin/locator/ilocatorfilter.h b/src/plugins/coreplugin/locator/ilocatorfilter.h index 06decea1eab..e907062973a 100644 --- a/src/plugins/coreplugin/locator/ilocatorfilter.h +++ b/src/plugins/coreplugin/locator/ilocatorfilter.h @@ -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; } }; diff --git a/src/plugins/cpptools/cpplocatorfilter_test.cpp b/src/plugins/cpptools/cpplocatorfilter_test.cpp index 1b5e64fecae..31b4b7045eb 100644 --- a/src/plugins/cpptools/cpplocatorfilter_test.cpp +++ b/src/plugins/cpptools/cpplocatorfilter_test.cpp @@ -173,21 +173,21 @@ void CppToolsPlugin::test_cpplocatorfilters_CppLocatorFilter_data() << cppFunctionsFilter << "function" << ResultDataList{ + ResultData("functionDefinedInClass(bool, int)", + "::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)", "::MyClass (file1.cpp)"), ResultData("functionDefinedOutSideClass(char)", "MyClass (file1.cpp)"), ResultData("functionDefinedOutSideClass(char)", "MyNamespace::MyClass (file1.cpp)"), - ResultData("functionDefinedOutSideClass(char)", - "::MyClass (file1.cpp)"), ResultData("functionDefinedOutSideClassAndNamespace(float)", "MyNamespace::MyClass (file1.cpp)"), - ResultData("myFunction(bool, int)", testFileShort), + ResultData("myFunction(bool, int)", " (file1.cpp)"), ResultData("myFunction(bool, int)", "MyNamespace (file1.cpp)"), - ResultData("myFunction(bool, int)", " (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)", + "::MyClass (file1.cpp)"), ResultData("functionDefinedInClass(bool, int)", "MyClass (file1.cpp)"), ResultData("functionDefinedInClass(bool, int)", "MyNamespace::MyClass (file1.cpp)"), - ResultData("functionDefinedInClass(bool, int)", - "::MyClass (file1.cpp)"), - ResultData("myFunction(bool, int)", testFileShort), + ResultData("myFunction(bool, int)", " (file1.cpp)"), ResultData("myFunction(bool, int)", "MyNamespace (file1.cpp)"), - ResultData("myFunction(bool, int)", " (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)", + "::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)", "::MyClass (file1.cpp)"), ResultData("functionDefinedOutSideClass(char)", "MyClass (file1.cpp)"), ResultData("functionDefinedOutSideClass(char)", "MyNamespace::MyClass (file1.cpp)"), - ResultData("functionDefinedOutSideClass(char)", - "::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", ""), ResultData("MyClass", "MyNamespace"), - ResultData("MyClass", "") + ResultData("MyClass", testFileShort) }; QTest::newRow("CppClassesFilter-WithNamespacePrefix")