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:
@@ -205,6 +205,21 @@ ClangModelManagerSupport::ClangModelManagerSupport()
|
||||
cppModelManager()->setLocatorFilter(std::make_unique<ClangGlobalSymbolFilter>());
|
||||
cppModelManager()->setClassesFilter(std::make_unique<ClangClassesFilter>());
|
||||
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();
|
||||
connect(editorManager, &EditorManager::editorOpened,
|
||||
@@ -587,6 +602,17 @@ void ClangModelManagerSupport::updateLanguageClient(Project *project)
|
||||
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)
|
||||
{
|
||||
if (sessionModeEnabled())
|
||||
|
||||
Reference in New Issue
Block a user