forked from qt-creator/qt-creator
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:
@@ -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();
|
||||
|
@@ -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;
|
||||
|
||||
/*!
|
||||
|
@@ -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);
|
||||
|
@@ -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.
|
||||
|
@@ -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();
|
||||
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -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()
|
||||
|
@@ -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, {});
|
||||
}
|
||||
|
@@ -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,
|
||||
|
@@ -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();
|
||||
|
Reference in New Issue
Block a user