forked from qt-creator/qt-creator
LocatorMatcher: Introduce LocatorMatcherTaskCreator
Register cpp and lsp matchers for all symbols, classes and functions. Change-Id: Id85c8164077ec395dac7e6ff45acc89db9e6ae08 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
@@ -32,17 +32,6 @@ namespace Internal {
|
|||||||
|
|
||||||
const int MaxResultCount = 10000;
|
const int MaxResultCount = 10000;
|
||||||
|
|
||||||
static QList<Client *> clientsForOpenProjects()
|
|
||||||
{
|
|
||||||
QSet<Client *> clients;
|
|
||||||
const QList<Project *> projects = ProjectManager::projects();
|
|
||||||
for (Project *project : projects) {
|
|
||||||
if (Client *client = ClangModelManagerSupport::clientForProject(project))
|
|
||||||
clients << client;
|
|
||||||
}
|
|
||||||
return clients.values();
|
|
||||||
}
|
|
||||||
|
|
||||||
class CppLocatorFilter : public CppEditor::CppLocatorFilter
|
class CppLocatorFilter : public CppEditor::CppLocatorFilter
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -72,7 +61,7 @@ public:
|
|||||||
}
|
}
|
||||||
void prepareSearch(const QString &entry) override
|
void prepareSearch(const QString &entry) override
|
||||||
{
|
{
|
||||||
prepareSearchForClients(entry, clientsForOpenProjects());
|
prepareSearchForClients(entry, ClangModelManagerSupport::clientsForOpenProjects());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -105,7 +94,7 @@ public:
|
|||||||
}
|
}
|
||||||
void prepareSearch(const QString &entry) override
|
void prepareSearch(const QString &entry) override
|
||||||
{
|
{
|
||||||
prepareSearchForClients(entry, clientsForOpenProjects());
|
prepareSearchForClients(entry, ClangModelManagerSupport::clientsForOpenProjects());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -138,7 +127,7 @@ public:
|
|||||||
}
|
}
|
||||||
void prepareSearch(const QString &entry) override
|
void prepareSearch(const QString &entry) override
|
||||||
{
|
{
|
||||||
prepareSearchForClients(entry, clientsForOpenProjects());
|
prepareSearchForClients(entry, ClangModelManagerSupport::clientsForOpenProjects());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -205,6 +205,21 @@ ClangModelManagerSupport::ClangModelManagerSupport()
|
|||||||
cppModelManager()->setLocatorFilter(std::make_unique<ClangGlobalSymbolFilter>());
|
cppModelManager()->setLocatorFilter(std::make_unique<ClangGlobalSymbolFilter>());
|
||||||
cppModelManager()->setClassesFilter(std::make_unique<ClangClassesFilter>());
|
cppModelManager()->setClassesFilter(std::make_unique<ClangClassesFilter>());
|
||||||
cppModelManager()->setFunctionsFilter(std::make_unique<ClangFunctionsFilter>());
|
cppModelManager()->setFunctionsFilter(std::make_unique<ClangFunctionsFilter>());
|
||||||
|
// Setup matchers
|
||||||
|
using WorkspaceMatcherCreator = std::function<Core::LocatorMatcherTask(Client *, int)>;
|
||||||
|
const auto matcherCreator = [](const WorkspaceMatcherCreator &creator) {
|
||||||
|
const QList<Client *> clients = clientsForOpenProjects();
|
||||||
|
QList<LocatorMatcherTask> matchers;
|
||||||
|
for (Client *client : clients)
|
||||||
|
matchers << creator(client, 10000);
|
||||||
|
return matchers;
|
||||||
|
};
|
||||||
|
LocatorMatcher::addLocatorMatcherCreator(
|
||||||
|
[matcherCreator] { return matcherCreator(&LanguageClient::workspaceLocatorMatcher); });
|
||||||
|
LocatorMatcher::addClassMatcherCreator(
|
||||||
|
[matcherCreator] { return matcherCreator(&LanguageClient::workspaceClassMatcher); });
|
||||||
|
LocatorMatcher::addFunctionMatcherCreator(
|
||||||
|
[matcherCreator] { return matcherCreator(&LanguageClient::workspaceFunctionMatcher); });
|
||||||
|
|
||||||
EditorManager *editorManager = EditorManager::instance();
|
EditorManager *editorManager = EditorManager::instance();
|
||||||
connect(editorManager, &EditorManager::editorOpened,
|
connect(editorManager, &EditorManager::editorOpened,
|
||||||
@@ -587,6 +602,17 @@ void ClangModelManagerSupport::updateLanguageClient(Project *project)
|
|||||||
m_generatorSynchronizer.addFuture(future);
|
m_generatorSynchronizer.addFuture(future);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QList<Client *> ClangModelManagerSupport::clientsForOpenProjects()
|
||||||
|
{
|
||||||
|
QSet<Client *> clients;
|
||||||
|
const QList<Project *> projects = ProjectManager::projects();
|
||||||
|
for (Project *project : projects) {
|
||||||
|
if (Client *client = ClangModelManagerSupport::clientForProject(project))
|
||||||
|
clients << client;
|
||||||
|
}
|
||||||
|
return clients.values();
|
||||||
|
}
|
||||||
|
|
||||||
ClangdClient *ClangModelManagerSupport::clientForProject(const Project *project)
|
ClangdClient *ClangModelManagerSupport::clientForProject(const Project *project)
|
||||||
{
|
{
|
||||||
if (sessionModeEnabled())
|
if (sessionModeEnabled())
|
||||||
|
@@ -24,6 +24,7 @@ QT_END_NAMESPACE
|
|||||||
|
|
||||||
namespace Core { class IEditor; }
|
namespace Core { class IEditor; }
|
||||||
namespace CppEditor { class RefactoringEngineInterface; }
|
namespace CppEditor { class RefactoringEngineInterface; }
|
||||||
|
namespace LanguageClient { class Client; }
|
||||||
namespace TextEditor { class TextEditorWidget; }
|
namespace TextEditor { class TextEditorWidget; }
|
||||||
|
|
||||||
namespace ClangCodeModel {
|
namespace ClangCodeModel {
|
||||||
@@ -45,6 +46,7 @@ public:
|
|||||||
TextEditor::TextDocument *baseTextDocument) override;
|
TextEditor::TextDocument *baseTextDocument) override;
|
||||||
bool usesClangd(const TextEditor::TextDocument *document) const override;
|
bool usesClangd(const TextEditor::TextDocument *document) const override;
|
||||||
|
|
||||||
|
static QList<LanguageClient::Client *> clientsForOpenProjects();
|
||||||
static ClangdClient *clientForProject(const ProjectExplorer::Project *project);
|
static ClangdClient *clientForProject(const ProjectExplorer::Project *project);
|
||||||
static ClangdClient *clientForFile(const Utils::FilePath &file);
|
static ClangdClient *clientForFile(const Utils::FilePath &file);
|
||||||
|
|
||||||
|
@@ -427,6 +427,51 @@ LocatorMatcherTask::OutputData LocatorMatcher::runBlocking(const QList<LocatorMa
|
|||||||
return tree.outputData();
|
return tree.outputData();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static QList<LocatorMatcherTaskCreator> s_locatorMatcherCreators = {};
|
||||||
|
static QList<LocatorMatcherTaskCreator> s_classMatcherCreators = {};
|
||||||
|
static QList<LocatorMatcherTaskCreator> s_functionMatcherCreators = {};
|
||||||
|
|
||||||
|
void LocatorMatcher::addLocatorMatcherCreator(const LocatorMatcherTaskCreator &creator)
|
||||||
|
{
|
||||||
|
QTC_ASSERT(creator, return);
|
||||||
|
s_locatorMatcherCreators.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> 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;
|
static QList<ILocatorFilter *> g_locatorFilters;
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
@@ -142,6 +142,7 @@ public:
|
|||||||
Utils::Tasking::TreeStorage<Storage> storage;
|
Utils::Tasking::TreeStorage<Storage> storage;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
using LocatorMatcherTaskCreator = std::function<QList<LocatorMatcherTask>()>;
|
||||||
class LocatorMatcherPrivate;
|
class LocatorMatcherPrivate;
|
||||||
|
|
||||||
class CORE_EXPORT LocatorMatcher final : public QObject
|
class CORE_EXPORT LocatorMatcher final : public QObject
|
||||||
@@ -165,6 +166,15 @@ public:
|
|||||||
static LocatorMatcherTask::OutputData runBlocking(const QList<LocatorMatcherTask> &tasks,
|
static LocatorMatcherTask::OutputData runBlocking(const QList<LocatorMatcherTask> &tasks,
|
||||||
const LocatorMatcherTask::InputData &input,
|
const LocatorMatcherTask::InputData &input,
|
||||||
int parallelLimit = 0);
|
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();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void serialOutputDataReady(const LocatorMatcherTask::OutputData &serialOutputData);
|
void serialOutputDataReady(const LocatorMatcherTask::OutputData &serialOutputData);
|
||||||
void done(bool success);
|
void done(bool success);
|
||||||
|
@@ -904,6 +904,10 @@ void CppModelManager::initCppTools()
|
|||||||
setSymbolsFindFilter(std::make_unique<SymbolsFindFilter>(this));
|
setSymbolsFindFilter(std::make_unique<SymbolsFindFilter>(this));
|
||||||
setCurrentDocumentFilter(
|
setCurrentDocumentFilter(
|
||||||
std::make_unique<Internal::CppCurrentDocumentFilter>(this));
|
std::make_unique<Internal::CppCurrentDocumentFilter>(this));
|
||||||
|
// Setup matchers
|
||||||
|
LocatorMatcher::addLocatorMatcherCreator([] { return QList{CppEditor::cppLocatorMatcher()}; });
|
||||||
|
LocatorMatcher::addClassMatcherCreator([] { return QList{CppEditor::cppClassMatcher()}; });
|
||||||
|
LocatorMatcher::addFunctionMatcherCreator([] { return QList{CppEditor::cppFunctionMatcher()}; });
|
||||||
}
|
}
|
||||||
|
|
||||||
CppModelManager::CppModelManager()
|
CppModelManager::CppModelManager()
|
||||||
|
Reference in New Issue
Block a user