LocatorMatcher: Introduce MatcherType enum

Use it for registering/getting different kinds of matchers.

Change-Id: I6f944e0332bf8c512892a00b8ba88f9939f34682
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
Jarek Kobus
2023-04-11 15:02:36 +02:00
parent f5cccab95b
commit 99b5d93cfb
10 changed files with 46 additions and 73 deletions

View File

@@ -214,11 +214,11 @@ ClangModelManagerSupport::ClangModelManagerSupport()
matchers << creator(client, 10000);
return matchers;
};
LocatorMatcher::addLocatorMatcherCreator(
[matcherCreator] { return matcherCreator(&LanguageClient::workspaceLocatorMatcher); });
LocatorMatcher::addClassMatcherCreator(
LocatorMatcher::addMatcherCreator(MatcherType::AllSymbols,
[matcherCreator] { return matcherCreator(&LanguageClient::workspaceAllSymbolsMatcher); });
LocatorMatcher::addMatcherCreator(MatcherType::Classes,
[matcherCreator] { return matcherCreator(&LanguageClient::workspaceClassMatcher); });
LocatorMatcher::addFunctionMatcherCreator(
LocatorMatcher::addMatcherCreator(MatcherType::Functions,
[matcherCreator] { return matcherCreator(&LanguageClient::workspaceFunctionMatcher); });
EditorManager *editorManager = EditorManager::instance();

View File

@@ -427,51 +427,23 @@ LocatorMatcherTask::OutputData LocatorMatcher::runBlocking(const QList<LocatorMa
return tree.outputData();
}
static QList<LocatorMatcherTaskCreator> s_locatorMatcherCreators = {};
static QList<LocatorMatcherTaskCreator> s_classMatcherCreators = {};
static QList<LocatorMatcherTaskCreator> s_functionMatcherCreators = {};
static QHash<MatcherType, QList<LocatorMatcherTaskCreator>> s_matcherCreators = {};
void LocatorMatcher::addLocatorMatcherCreator(const LocatorMatcherTaskCreator &creator)
void LocatorMatcher::addMatcherCreator(MatcherType type, const LocatorMatcherTaskCreator &creator)
{
QTC_ASSERT(creator, return);
s_locatorMatcherCreators.append(creator);
s_matcherCreators[type].append(creator);
}
void LocatorMatcher::addClassMatcherCreator(const LocatorMatcherTaskCreator &creator)
{
QTC_ASSERT(creator, return);
s_classMatcherCreators.append(creator);
}
void LocatorMatcher::addFunctionMatcherCreator(const LocatorMatcherTaskCreator &creator)
{
QTC_ASSERT(creator, return);
s_functionMatcherCreators.append(creator);
}
static QList<LocatorMatcherTask> matchers(const QList<LocatorMatcherTaskCreator> &creators)
QList<LocatorMatcherTask> LocatorMatcher::matchers(MatcherType type)
{
const QList<LocatorMatcherTaskCreator> creators = s_matcherCreators.value(type);
QList<LocatorMatcherTask> result;
for (const LocatorMatcherTaskCreator &creator : creators)
result << creator();
return result;
}
QList<LocatorMatcherTask> LocatorMatcher::locatorMatchers()
{
return matchers(s_locatorMatcherCreators);
}
QList<LocatorMatcherTask> LocatorMatcher::classMatchers()
{
return matchers(s_classMatcherCreators);
}
QList<LocatorMatcherTask> LocatorMatcher::functionMatchers()
{
return matchers(s_functionMatcherCreators);
}
static QList<ILocatorFilter *> g_locatorFilters;
/*!

View File

@@ -145,6 +145,12 @@ public:
using LocatorMatcherTaskCreator = std::function<QList<LocatorMatcherTask>()>;
class LocatorMatcherPrivate;
enum class MatcherType {
AllSymbols,
Classes,
Functions
};
class CORE_EXPORT LocatorMatcher final : public QObject
{
Q_OBJECT
@@ -167,13 +173,8 @@ public:
const LocatorMatcherTask::InputData &input,
int parallelLimit = 0);
static void addLocatorMatcherCreator(const LocatorMatcherTaskCreator &creator);
static void addClassMatcherCreator(const LocatorMatcherTaskCreator &creator);
static void addFunctionMatcherCreator(const LocatorMatcherTaskCreator &creator);
static QList<LocatorMatcherTask> locatorMatchers();
static QList<LocatorMatcherTask> classMatchers();
static QList<LocatorMatcherTask> functionMatchers();
static void addMatcherCreator(MatcherType type, const LocatorMatcherTaskCreator &creator);
static QList<LocatorMatcherTask> matchers(MatcherType type);
signals:
void serialOutputDataReady(const LocatorMatcherTask::OutputData &serialOutputData);

View File

@@ -110,7 +110,7 @@ LocatorMatcherTask locatorMatcher(IndexItem::ItemType type, const EntryFromIndex
return {Async<LocatorMatcherTask::OutputData>(onSetup, onDone, onDone), storage};
}
LocatorMatcherTask cppLocatorMatcher()
LocatorMatcherTask cppAllSymbolsMatcher()
{
const auto converter = [](const IndexItem::Ptr &info) {
// TODO: Passing nullptr for filter -> accept won't work now. Replace with accept function.

View File

@@ -10,7 +10,7 @@
namespace CppEditor {
Core::LocatorMatcherTask CPPEDITOR_EXPORT cppLocatorMatcher();
Core::LocatorMatcherTask CPPEDITOR_EXPORT cppAllSymbolsMatcher();
Core::LocatorMatcherTask CPPEDITOR_EXPORT cppClassMatcher();
Core::LocatorMatcherTask CPPEDITOR_EXPORT cppFunctionMatcher();

View File

@@ -127,7 +127,7 @@ void LocatorFilterTest::testLocatorFilter()
{
QFETCH(QString, testFile);
QFETCH(ILocatorFilter *, filter);
QFETCH(MatcherCreator, matcherCreator);
QFETCH(MatcherType, matcherType);
QFETCH(QString, searchText);
QFETCH(ResultDataList, expectedResults);
@@ -138,7 +138,8 @@ void LocatorFilterTest::testLocatorFilter()
{
Tests::VerifyCleanCppModelManager verify;
CppLocatorFilterTestCase(nullptr, matcherCreator(), testFile, searchText, expectedResults);
CppLocatorFilterTestCase(nullptr, LocatorMatcher::matchers(matcherType), testFile,
searchText, expectedResults);
}
}
@@ -146,7 +147,7 @@ void LocatorFilterTest::testLocatorFilter_data()
{
QTest::addColumn<QString>("testFile");
QTest::addColumn<ILocatorFilter *>("filter");
QTest::addColumn<MatcherCreator>("matcherCreator");
QTest::addColumn<MatcherType>("matcherType");
QTest::addColumn<QString>("searchText");
QTest::addColumn<ResultDataList>("expectedResults");
@@ -155,10 +156,6 @@ void LocatorFilterTest::testLocatorFilter_data()
ILocatorFilter *cppClassesFilter = cppModelManager->classesFilter();
ILocatorFilter *cppLocatorFilter = cppModelManager->locatorFilter();
const MatcherCreator functionMatcherCreator = &LocatorMatcher::functionMatchers;
const MatcherCreator classMatcherCreator = &LocatorMatcher::classMatchers;
const MatcherCreator locatorMatcherCreator = &LocatorMatcher::locatorMatchers;
MyTestDataDir testDirectory("testdata_basic");
QString testFile = testDirectory.file("file1.cpp");
testFile[0] = testFile[0].toLower(); // Ensure Windows path sorts after scope names.
@@ -169,7 +166,7 @@ void LocatorFilterTest::testLocatorFilter_data()
QTest::newRow("CppFunctionsFilter")
<< testFile
<< cppFunctionsFilter
<< functionMatcherCreator
<< MatcherType::Functions
<< "function"
<< ResultDataList{
ResultData("functionDefinedInClass(bool, int)",
@@ -192,7 +189,7 @@ void LocatorFilterTest::testLocatorFilter_data()
QTest::newRow("CppFunctionsFilter-Sorting")
<< testFile
<< cppFunctionsFilter
<< functionMatcherCreator
<< MatcherType::Functions
<< "pos"
<< ResultDataList{
ResultData("positiveNumber()", testFileShort),
@@ -204,7 +201,7 @@ void LocatorFilterTest::testLocatorFilter_data()
QTest::newRow("CppFunctionsFilter-arguments")
<< testFile
<< cppFunctionsFilter
<< functionMatcherCreator
<< MatcherType::Functions
<< "function*bool"
<< ResultDataList{
ResultData("functionDefinedInClass(bool, int)",
@@ -221,7 +218,7 @@ void LocatorFilterTest::testLocatorFilter_data()
QTest::newRow("CppFunctionsFilter-WithNamespacePrefix")
<< testFile
<< cppFunctionsFilter
<< functionMatcherCreator
<< MatcherType::Functions
<< "mynamespace::"
<< ResultDataList{
ResultData("MyClass()", "MyNamespace::MyClass (file1.cpp)"),
@@ -237,7 +234,7 @@ void LocatorFilterTest::testLocatorFilter_data()
QTest::newRow("CppFunctionsFilter-WithClassPrefix")
<< testFile
<< cppFunctionsFilter
<< functionMatcherCreator
<< MatcherType::Functions
<< "MyClass::func"
<< ResultDataList{
ResultData("functionDefinedInClass(bool, int)",
@@ -259,7 +256,7 @@ void LocatorFilterTest::testLocatorFilter_data()
QTest::newRow("CppClassesFilter")
<< testFile
<< cppClassesFilter
<< classMatcherCreator
<< MatcherType::Classes
<< "myclass"
<< ResultDataList{
ResultData("MyClass", "<anonymous namespace>"),
@@ -270,7 +267,7 @@ void LocatorFilterTest::testLocatorFilter_data()
QTest::newRow("CppClassesFilter-WithNamespacePrefix")
<< testFile
<< cppClassesFilter
<< classMatcherCreator
<< MatcherType::Classes
<< "mynamespace::"
<< ResultDataList{
ResultData("MyClass", "MyNamespace")
@@ -280,7 +277,7 @@ void LocatorFilterTest::testLocatorFilter_data()
QTest::newRow("CppLocatorFilter-filtered")
<< testFile
<< cppLocatorFilter
<< locatorMatcherCreator
<< MatcherType::AllSymbols
<< "my"
<< ResultDataList{
ResultData("MyClass", testFileShort),
@@ -307,7 +304,7 @@ void LocatorFilterTest::testLocatorFilter_data()
QTest::newRow("CppClassesFilter-ObjC")
<< objTestFile
<< cppClassesFilter
<< classMatcherCreator
<< MatcherType::Classes
<< "M"
<< ResultDataList{
ResultData("MyClass", objTestFileShort),
@@ -319,7 +316,7 @@ void LocatorFilterTest::testLocatorFilter_data()
QTest::newRow("CppFunctionsFilter-ObjC")
<< objTestFile
<< cppFunctionsFilter
<< functionMatcherCreator
<< MatcherType::Functions
<< "M"
<< ResultDataList{
ResultData("anotherMethod", "MyClass (file1.mm)"),
@@ -428,8 +425,8 @@ void LocatorFilterTest::testFunctionsFilterHighlighting()
{
Tests::VerifyCleanCppModelManager verify;
const MatcherCreator matcherCreator = &LocatorMatcher::functionMatchers;
CppLocatorFilterTestCase(nullptr, matcherCreator(), testFile, searchText, expectedResults);
CppLocatorFilterTestCase(nullptr, LocatorMatcher::matchers(MatcherType::Functions),
testFile, searchText, expectedResults);
}
}

View File

@@ -535,7 +535,7 @@ void CppModelManager::findUnusedFunctions(const FilePath &folder)
// Step 1: Employ locator to find all functions
LocatorMatcher *matcher = new LocatorMatcher;
matcher->setTasks(LocatorMatcher::functionMatchers());
matcher->setTasks(LocatorMatcher::matchers(MatcherType::Functions));
const QPointer<SearchResult> search
= SearchResultWindow::instance()->startNewSearch(Tr::tr("Find Unused Functions"),
{},
@@ -897,9 +897,12 @@ void CppModelManager::initCppTools()
setSymbolsFindFilter(std::make_unique<SymbolsFindFilter>(this));
setCurrentDocumentFilter(std::make_unique<CppCurrentDocumentFilter>());
// Setup matchers
LocatorMatcher::addLocatorMatcherCreator([] { return QList{CppEditor::cppLocatorMatcher()}; });
LocatorMatcher::addClassMatcherCreator([] { return QList{CppEditor::cppClassMatcher()}; });
LocatorMatcher::addFunctionMatcherCreator([] { return QList{CppEditor::cppFunctionMatcher()}; });
LocatorMatcher::addMatcherCreator(MatcherType::AllSymbols,
[] { return QList{CppEditor::cppAllSymbolsMatcher()}; });
LocatorMatcher::addMatcherCreator(MatcherType::Classes,
[] { return QList{CppEditor::cppClassMatcher()}; });
LocatorMatcher::addMatcherCreator(MatcherType::Functions,
[] { return QList{CppEditor::cppFunctionMatcher()}; });
}
CppModelManager::CppModelManager()

View File

@@ -94,7 +94,7 @@ LocatorMatcherTask locatorMatcher(Client *client, int maxResultCount,
return {root, storage};
}
LocatorMatcherTask workspaceLocatorMatcher(Client *client, int maxResultCount)
LocatorMatcherTask workspaceAllSymbolsMatcher(Client *client, int maxResultCount)
{
return locatorMatcher(client, maxResultCount, {});
}

View File

@@ -20,8 +20,8 @@ namespace Core { class IEditor; }
namespace LanguageClient {
// TODO: Could be public methods of Client instead
Core::LocatorMatcherTask LANGUAGECLIENT_EXPORT workspaceLocatorMatcher(Client *client,
int maxResultCount = 0);
Core::LocatorMatcherTask LANGUAGECLIENT_EXPORT workspaceAllSymbolsMatcher(Client *client,
int maxResultCount = 0);
Core::LocatorMatcherTask LANGUAGECLIENT_EXPORT workspaceClassMatcher(Client *client,
int maxResultCount = 0);
Core::LocatorMatcherTask LANGUAGECLIENT_EXPORT workspaceFunctionMatcher(Client *client,

View File

@@ -647,7 +647,7 @@ void LineEditField::setupCompletion(FancyLineEdit *lineEdit)
lineEdit->setSpecialCompleter(new QCompleter(completionList, lineEdit));
};
LocatorMatcher *matcher = new LocatorMatcher;
matcher->setTasks(LocatorMatcher::classMatchers());
matcher->setTasks(LocatorMatcher::matchers(MatcherType::Classes));
QObject::connect(matcher, &LocatorMatcher::serialOutputDataReady, lineEdit, handleResults);
QObject::connect(matcher, &LocatorMatcher::done, matcher, &QObject::deleteLater);
matcher->start();