forked from qt-creator/qt-creator
LanguageClient: unify client container
Change-Id: I17b5e7ca4999cd5a9ca8e79577f29854082b6c6b Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
@@ -1727,7 +1727,7 @@ QString ClangdClient::displayNameFromDocumentSymbol(SymbolKind kind, const QStri
|
|||||||
void ClangdClient::handleUiHeaderChange(const QString &fileName)
|
void ClangdClient::handleUiHeaderChange(const QString &fileName)
|
||||||
{
|
{
|
||||||
const QRegularExpression includeRex("#include.*" + fileName + R"([>"])");
|
const QRegularExpression includeRex("#include.*" + fileName + R"([>"])");
|
||||||
const QVector<Client *> &allClients = LanguageClientManager::clients();
|
const QList<Client *> &allClients = LanguageClientManager::clients();
|
||||||
for (Client * const client : allClients) {
|
for (Client * const client : allClients) {
|
||||||
if (!client->reachable() || !qobject_cast<ClangdClient *>(client))
|
if (!client->reachable() || !qobject_cast<ClangdClient *>(client))
|
||||||
continue;
|
continue;
|
||||||
|
@@ -157,7 +157,7 @@ ClangGlobalSymbolFilter::~ClangGlobalSymbolFilter()
|
|||||||
void ClangGlobalSymbolFilter::prepareSearch(const QString &entry)
|
void ClangGlobalSymbolFilter::prepareSearch(const QString &entry)
|
||||||
{
|
{
|
||||||
m_cppFilter->prepareSearch(entry);
|
m_cppFilter->prepareSearch(entry);
|
||||||
QVector<LanguageClient::Client *> clients;
|
QList<LanguageClient::Client *> clients;
|
||||||
for (ProjectExplorer::Project * const project : ProjectExplorer::SessionManager::projects()) {
|
for (ProjectExplorer::Project * const project : ProjectExplorer::SessionManager::projects()) {
|
||||||
LanguageClient::Client * const client
|
LanguageClient::Client * const client
|
||||||
= ClangModelManagerSupport::instance()->clientForProject(project);
|
= ClangModelManagerSupport::instance()->clientForProject(project);
|
||||||
|
@@ -189,7 +189,7 @@ Client *LanguageClientManager::startClient(BaseSettings *setting, ProjectExplore
|
|||||||
return client;
|
return client;
|
||||||
}
|
}
|
||||||
|
|
||||||
QVector<Client *> LanguageClientManager::clients()
|
QList<Client *> LanguageClientManager::clients()
|
||||||
{
|
{
|
||||||
QTC_ASSERT(managerInstance, return {});
|
QTC_ASSERT(managerInstance, return {});
|
||||||
return managerInstance->m_clients;
|
return managerInstance->m_clients;
|
||||||
@@ -233,7 +233,7 @@ void LanguageClientManager::deleteClient(Client *client)
|
|||||||
qCDebug(Log) << "delete client: " << client->name() << client;
|
qCDebug(Log) << "delete client: " << client->name() << client;
|
||||||
client->disconnect(managerInstance);
|
client->disconnect(managerInstance);
|
||||||
managerInstance->m_clients.removeAll(client);
|
managerInstance->m_clients.removeAll(client);
|
||||||
for (QVector<Client *> &clients : managerInstance->m_clientsForSetting)
|
for (QList<Client *> &clients : managerInstance->m_clientsForSetting)
|
||||||
clients.removeAll(client);
|
clients.removeAll(client);
|
||||||
if (managerInstance->m_shuttingDown) {
|
if (managerInstance->m_shuttingDown) {
|
||||||
delete client;
|
delete client;
|
||||||
@@ -272,7 +272,7 @@ QList<Client *> LanguageClientManager::clientsSupportingDocument(const TextEdito
|
|||||||
QTC_ASSERT(doc, return {};);
|
QTC_ASSERT(doc, return {};);
|
||||||
return Utils::filtered(managerInstance->reachableClients(), [doc](Client *client) {
|
return Utils::filtered(managerInstance->reachableClients(), [doc](Client *client) {
|
||||||
return client->isSupportedDocument(doc);
|
return client->isSupportedDocument(doc);
|
||||||
}).toList();
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void LanguageClientManager::applySettings()
|
void LanguageClientManager::applySettings()
|
||||||
@@ -286,7 +286,7 @@ void LanguageClientManager::applySettings()
|
|||||||
|
|
||||||
for (BaseSettings *setting : restarts) {
|
for (BaseSettings *setting : restarts) {
|
||||||
QList<TextEditor::TextDocument *> documents;
|
QList<TextEditor::TextDocument *> documents;
|
||||||
const QVector<Client *> currentClients = clientForSetting(setting);
|
const QList<Client *> currentClients = clientForSetting(setting);
|
||||||
for (Client *client : currentClients) {
|
for (Client *client : currentClients) {
|
||||||
documents << managerInstance->m_clientForDocument.keys(client);
|
documents << managerInstance->m_clientForDocument.keys(client);
|
||||||
shutdownClient(client);
|
shutdownClient(client);
|
||||||
@@ -367,7 +367,7 @@ void LanguageClientManager::enableClientSettings(const QString &settingsId)
|
|||||||
managerInstance->applySettings();
|
managerInstance->applySettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
QVector<Client *> LanguageClientManager::clientForSetting(const BaseSettings *setting)
|
QList<Client *> LanguageClientManager::clientForSetting(const BaseSettings *setting)
|
||||||
{
|
{
|
||||||
QTC_ASSERT(managerInstance, return {});
|
QTC_ASSERT(managerInstance, return {});
|
||||||
auto instance = managerInstance;
|
auto instance = managerInstance;
|
||||||
@@ -414,7 +414,7 @@ const QList<Client *> LanguageClientManager::clientsForProject(
|
|||||||
{
|
{
|
||||||
return Utils::filtered(managerInstance->m_clients, [project](const Client *c) {
|
return Utils::filtered(managerInstance->m_clients, [project](const Client *c) {
|
||||||
return c->project() == project;
|
return c->project() == project;
|
||||||
}).toList();
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void LanguageClientManager::openDocumentWithClient(TextEditor::TextDocument *document, Client *client)
|
void LanguageClientManager::openDocumentWithClient(TextEditor::TextDocument *document, Client *client)
|
||||||
@@ -455,7 +455,7 @@ void LanguageClientManager::showInspector()
|
|||||||
inspectorWidget->show();
|
inspectorWidget->show();
|
||||||
}
|
}
|
||||||
|
|
||||||
QVector<Client *> LanguageClientManager::reachableClients()
|
QList<Client *> LanguageClientManager::reachableClients()
|
||||||
{
|
{
|
||||||
return Utils::filtered(m_clients, &Client::reachable);
|
return Utils::filtered(m_clients, &Client::reachable);
|
||||||
}
|
}
|
||||||
@@ -506,7 +506,7 @@ void LanguageClientManager::documentOpened(Core::IDocument *document)
|
|||||||
for (BaseSettings *setting : settings) {
|
for (BaseSettings *setting : settings) {
|
||||||
if (setting->isValid() && setting->m_enabled
|
if (setting->isValid() && setting->m_enabled
|
||||||
&& setting->m_languageFilter.isSupported(document)) {
|
&& setting->m_languageFilter.isSupported(document)) {
|
||||||
QVector<Client *> clients = clientForSetting(setting);
|
QList<Client *> clients = clientForSetting(setting);
|
||||||
if (setting->m_startBehavior == BaseSettings::RequiresProject) {
|
if (setting->m_startBehavior == BaseSettings::RequiresProject) {
|
||||||
const Utils::FilePath &filePath = document->filePath();
|
const Utils::FilePath &filePath = document->filePath();
|
||||||
for (ProjectExplorer::Project *project :
|
for (ProjectExplorer::Project *project :
|
||||||
@@ -548,7 +548,7 @@ void LanguageClientManager::documentClosed(Core::IDocument *document)
|
|||||||
void LanguageClientManager::documentContentsSaved(Core::IDocument *document)
|
void LanguageClientManager::documentContentsSaved(Core::IDocument *document)
|
||||||
{
|
{
|
||||||
if (auto textDocument = qobject_cast<TextEditor::TextDocument *>(document)) {
|
if (auto textDocument = qobject_cast<TextEditor::TextDocument *>(document)) {
|
||||||
const QVector<Client *> &clients = reachableClients();
|
const QList<Client *> &clients = reachableClients();
|
||||||
for (Client *client : clients)
|
for (Client *client : clients)
|
||||||
client->documentContentsSaved(textDocument);
|
client->documentContentsSaved(textDocument);
|
||||||
}
|
}
|
||||||
@@ -557,7 +557,7 @@ void LanguageClientManager::documentContentsSaved(Core::IDocument *document)
|
|||||||
void LanguageClientManager::documentWillSave(Core::IDocument *document)
|
void LanguageClientManager::documentWillSave(Core::IDocument *document)
|
||||||
{
|
{
|
||||||
if (auto textDocument = qobject_cast<TextEditor::TextDocument *>(document)) {
|
if (auto textDocument = qobject_cast<TextEditor::TextDocument *>(document)) {
|
||||||
const QVector<Client *> &clients = reachableClients();
|
const QList<Client *> &clients = reachableClients();
|
||||||
for (Client *client : clients)
|
for (Client *client : clients)
|
||||||
client->documentWillSave(textDocument);
|
client->documentWillSave(textDocument);
|
||||||
}
|
}
|
||||||
@@ -598,7 +598,7 @@ void LanguageClientManager::projectAdded(ProjectExplorer::Project *project)
|
|||||||
connect(project, &ProjectExplorer::Project::fileListChanged, this, [this, project]() {
|
connect(project, &ProjectExplorer::Project::fileListChanged, this, [this, project]() {
|
||||||
updateProject(project);
|
updateProject(project);
|
||||||
});
|
});
|
||||||
const QVector<Client *> &clients = reachableClients();
|
const QList<Client *> &clients = reachableClients();
|
||||||
for (Client *client : clients)
|
for (Client *client : clients)
|
||||||
client->projectOpened(project);
|
client->projectOpened(project);
|
||||||
}
|
}
|
||||||
|
@@ -62,7 +62,7 @@ public:
|
|||||||
static void clientStarted(Client *client);
|
static void clientStarted(Client *client);
|
||||||
static void clientFinished(Client *client);
|
static void clientFinished(Client *client);
|
||||||
static Client *startClient(BaseSettings *setting, ProjectExplorer::Project *project = nullptr);
|
static Client *startClient(BaseSettings *setting, ProjectExplorer::Project *project = nullptr);
|
||||||
static QVector<Client *> clients();
|
static QList<Client *> clients();
|
||||||
static void addClient(Client *client);
|
static void addClient(Client *client);
|
||||||
|
|
||||||
static void addExclusiveRequest(const LanguageServerProtocol::MessageId &id, Client *client);
|
static void addExclusiveRequest(const LanguageServerProtocol::MessageId &id, Client *client);
|
||||||
@@ -81,7 +81,7 @@ public:
|
|||||||
static QList<BaseSettings *> currentSettings();
|
static QList<BaseSettings *> currentSettings();
|
||||||
static void registerClientSettings(BaseSettings *settings);
|
static void registerClientSettings(BaseSettings *settings);
|
||||||
static void enableClientSettings(const QString &settingsId);
|
static void enableClientSettings(const QString &settingsId);
|
||||||
static QVector<Client *> clientForSetting(const BaseSettings *setting);
|
static QList<Client *> clientForSetting(const BaseSettings *setting);
|
||||||
static const BaseSettings *settingForClient(Client *setting);
|
static const BaseSettings *settingForClient(Client *setting);
|
||||||
static Client *clientForDocument(TextEditor::TextDocument *document);
|
static Client *clientForDocument(TextEditor::TextDocument *document);
|
||||||
static Client *clientForFilePath(const Utils::FilePath &filePath);
|
static Client *clientForFilePath(const Utils::FilePath &filePath);
|
||||||
@@ -117,12 +117,12 @@ private:
|
|||||||
void updateProject(ProjectExplorer::Project *project);
|
void updateProject(ProjectExplorer::Project *project);
|
||||||
void projectAdded(ProjectExplorer::Project *project);
|
void projectAdded(ProjectExplorer::Project *project);
|
||||||
|
|
||||||
QVector<Client *> reachableClients();
|
QList<Client *> reachableClients();
|
||||||
|
|
||||||
bool m_shuttingDown = false;
|
bool m_shuttingDown = false;
|
||||||
QVector<Client *> m_clients;
|
QList<Client *> m_clients;
|
||||||
QList<BaseSettings *> m_currentSettings; // owned
|
QList<BaseSettings *> m_currentSettings; // owned
|
||||||
QMap<QString, QVector<Client *>> m_clientsForSetting;
|
QMap<QString, QList<Client *>> m_clientsForSetting;
|
||||||
QHash<TextEditor::TextDocument *, QPointer<Client>> m_clientForDocument;
|
QHash<TextEditor::TextDocument *, QPointer<Client>> m_clientForDocument;
|
||||||
QHash<LanguageServerProtocol::MessageId, QList<Client *>> m_exclusiveRequests;
|
QHash<LanguageServerProtocol::MessageId, QList<Client *>> m_exclusiveRequests;
|
||||||
DocumentLocatorFilter m_currentDocumentLocatorFilter;
|
DocumentLocatorFilter m_currentDocumentLocatorFilter;
|
||||||
|
@@ -253,13 +253,13 @@ void WorkspaceLocatorFilter::prepareSearch(const QString &entry)
|
|||||||
prepareSearch(entry, LanguageClientManager::clients(), false);
|
prepareSearch(entry, LanguageClientManager::clients(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorkspaceLocatorFilter::prepareSearch(const QString &entry, const QVector<Client *> &clients)
|
void WorkspaceLocatorFilter::prepareSearch(const QString &entry, const QList<Client *> &clients)
|
||||||
{
|
{
|
||||||
prepareSearch(entry, clients, true);
|
prepareSearch(entry, clients, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorkspaceLocatorFilter::prepareSearch(const QString &entry,
|
void WorkspaceLocatorFilter::prepareSearch(const QString &entry,
|
||||||
const QVector<Client *> &clients,
|
const QList<Client *> &clients,
|
||||||
bool force)
|
bool force)
|
||||||
{
|
{
|
||||||
m_pendingRequests.clear();
|
m_pendingRequests.clear();
|
||||||
|
@@ -100,7 +100,7 @@ public:
|
|||||||
/// request workspace symbols for all clients with enabled locator
|
/// request workspace symbols for all clients with enabled locator
|
||||||
void prepareSearch(const QString &entry) override;
|
void prepareSearch(const QString &entry) override;
|
||||||
/// force request workspace symbols for all given clients
|
/// force request workspace symbols for all given clients
|
||||||
void prepareSearch(const QString &entry, const QVector<Client *> &clients);
|
void prepareSearch(const QString &entry, const QList<Client *> &clients);
|
||||||
QList<Core::LocatorFilterEntry> matchesFor(QFutureInterface<Core::LocatorFilterEntry> &future,
|
QList<Core::LocatorFilterEntry> matchesFor(QFutureInterface<Core::LocatorFilterEntry> &future,
|
||||||
const QString &entry) override;
|
const QString &entry) override;
|
||||||
void accept(const Core::LocatorFilterEntry &selection,
|
void accept(const Core::LocatorFilterEntry &selection,
|
||||||
@@ -117,7 +117,7 @@ protected:
|
|||||||
void setMaxResultCount(qint64 limit) { m_maxResultCount = limit; }
|
void setMaxResultCount(qint64 limit) { m_maxResultCount = limit; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void prepareSearch(const QString &entry, const QVector<Client *> &clients, bool force);
|
void prepareSearch(const QString &entry, const QList<Client *> &clients, bool force);
|
||||||
void handleResponse(Client *client,
|
void handleResponse(Client *client,
|
||||||
const LanguageServerProtocol::WorkspaceSymbolRequest::Response &response);
|
const LanguageServerProtocol::WorkspaceSymbolRequest::Response &response);
|
||||||
|
|
||||||
|
@@ -442,7 +442,7 @@ bool PyLSSettings::applyFromSettingsWidget(QWidget *widget)
|
|||||||
if (m_configuration != pylswidget->configuration()) {
|
if (m_configuration != pylswidget->configuration()) {
|
||||||
m_configuration = pylswidget->configuration();
|
m_configuration = pylswidget->configuration();
|
||||||
if (!changed) { // if only the settings configuration changed just send an update
|
if (!changed) { // if only the settings configuration changed just send an update
|
||||||
const QVector<Client *> clients = LanguageClientManager::clientForSetting(this);
|
const QList<Client *> clients = LanguageClientManager::clientForSetting(this);
|
||||||
for (Client *client : clients)
|
for (Client *client : clients)
|
||||||
client->updateConfiguration(configuration());
|
client->updateConfiguration(configuration());
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user