From 1221a9678de22badd0a5f73dee452d9bbef9c4b8 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Thu, 28 Nov 2024 08:01:16 +0100 Subject: [PATCH] LanguageClient: fix opening docs after always on client settings change Change-Id: I16dd336278071ae3175971f3044c8556f20da993 Reviewed-by: Marcus Tillmanns --- .../languageclient/languageclientmanager.cpp | 40 +++++++------------ 1 file changed, 14 insertions(+), 26 deletions(-) diff --git a/src/plugins/languageclient/languageclientmanager.cpp b/src/plugins/languageclient/languageclientmanager.cpp index a83b52b6e36..8452afada59 100644 --- a/src/plugins/languageclient/languageclientmanager.cpp +++ b/src/plugins/languageclient/languageclientmanager.cpp @@ -310,37 +310,29 @@ void LanguageClientManager::applySettings(BaseSettings *setting) managerInstance->m_clientForDocument.remove(document); if (!setting->isValid() || !setting->m_enabled) return; - switch (setting->m_startBehavior) { - case BaseSettings::AlwaysOn: { - Client *client = startClient(setting); - for (TextEditor::TextDocument *document : std::as_const(documents)) - managerInstance->m_clientForDocument[document] = client; - break; - } - case BaseSettings::RequiresFile: { - Client *client = nullptr; + if (setting->m_startBehavior == BaseSettings::AlwaysOn || BaseSettings::RequiresFile) { + auto ensureClient = [setting, client = static_cast(nullptr)]() mutable { + if (!client) + client = startClient(setting); + return client; + }; + if (setting->m_startBehavior == BaseSettings::AlwaysOn) + ensureClient(); + for (TextEditor::TextDocument *previousDocument : std::as_const(documents)) { - if (setting->m_languageFilter.isSupported(previousDocument)) { - if (!client) - client = startClient(setting); - openDocumentWithClient(previousDocument, client); - } + if (setting->m_languageFilter.isSupported(previousDocument)) + openDocumentWithClient(previousDocument, ensureClient()); } const QList &openedDocuments = Core::DocumentModel::openedDocuments(); for (Core::IDocument *document : openedDocuments) { if (documents.contains(document)) continue; // already handled above if (auto textDocument = qobject_cast(document)) { - if (setting->m_languageFilter.isSupported(document)) { - if (!client) - client = startClient(setting); - client->openDocument(textDocument); - } + if (setting->m_languageFilter.isSupported(document)) + ensureClient()->openDocument(textDocument); } } - break; - } - case BaseSettings::RequiresProject: { + } else if (setting->m_startBehavior == BaseSettings::RequiresProject) { const QList &openedDocuments = Core::DocumentModel::openedDocuments(); QHash clientForProject; for (Core::IDocument *document : openedDocuments) { @@ -362,10 +354,6 @@ void LanguageClientManager::applySettings(BaseSettings *setting) } } } - break; - } - default: - break; } }