LanguageClient: show unreachable servers in the lsp menu

Task-number: QTCREATORBUG-31125
Change-Id: I6526955fe4e3d65c6d83b88876eb47692d694955
Reviewed-by: Sami Shalayel <sami.shalayel@qt.io>
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
David Schulz
2024-07-01 12:16:21 +02:00
parent 3b5547214c
commit 0cfdf2f5ae
3 changed files with 12 additions and 6 deletions

View File

@@ -275,13 +275,14 @@ LanguageClientManager *LanguageClientManager::instance()
return managerInstance; return managerInstance;
} }
QList<Client *> LanguageClientManager::clientsSupportingDocument(const TextEditor::TextDocument *doc) QList<Client *> LanguageClientManager::clientsSupportingDocument(
const TextEditor::TextDocument *doc, bool onlyReachable)
{ {
QTC_ASSERT(managerInstance, return {}); QTC_ASSERT(managerInstance, return {});
QTC_ASSERT(doc, return {};); QTC_ASSERT(doc, return {};);
return Utils::filtered(managerInstance->reachableClients(), [doc](Client *client) { return Utils::filtered(
return client->isSupportedDocument(doc); onlyReachable ? managerInstance->reachableClients() : managerInstance->m_clients,
}); [doc](Client *client) { return client->isSupportedDocument(doc); });
} }
void LanguageClientManager::applySettings() void LanguageClientManager::applySettings()

View File

@@ -48,7 +48,8 @@ public:
static LanguageClientManager *instance(); static LanguageClientManager *instance();
static QList<Client *> clientsSupportingDocument(const TextEditor::TextDocument *doc); static QList<Client *> clientsSupportingDocument(
const TextEditor::TextDocument *doc, bool onlyReachable = true);
static void applySettings(); static void applySettings();
static QList<BaseSettings *> currentSettings(); static QList<BaseSettings *> currentSettings();

View File

@@ -256,7 +256,7 @@ void updateEditorToolBar(Core::IEditor *editor)
auto menu = new QMenu; auto menu = new QMenu;
auto clientsGroup = new QActionGroup(menu); auto clientsGroup = new QActionGroup(menu);
clientsGroup->setExclusive(true); clientsGroup->setExclusive(true);
for (auto client : LanguageClientManager::clientsSupportingDocument(document)) { for (auto client : LanguageClientManager::clientsSupportingDocument(document, false)) {
auto action = clientsGroup->addAction(client->name()); auto action = clientsGroup->addAction(client->name());
auto reopen = [action, client = QPointer(client), document] { auto reopen = [action, client = QPointer(client), document] {
if (!client) if (!client)
@@ -266,6 +266,10 @@ void updateEditorToolBar(Core::IEditor *editor)
}; };
action->setCheckable(true); action->setCheckable(true);
action->setChecked(client == LanguageClientManager::clientForDocument(document)); action->setChecked(client == LanguageClientManager::clientForDocument(document));
action->setEnabled(client->reachable());
QObject::connect(client, &Client::stateChanged, action, [action, client] {
action->setEnabled(client->reachable());
});
QObject::connect(action, &QAction::triggered, reopen); QObject::connect(action, &QAction::triggered, reopen);
} }
menu->addActions(clientsGroup->actions()); menu->addActions(clientsGroup->actions());