From b4c2b06a736df3083912191b61de7aeea339df23 Mon Sep 17 00:00:00 2001 From: Max Date: Thu, 4 Dec 2025 00:06:09 +0100 Subject: [PATCH] show a message when LSP binary is not available --- crates/activity_indicator/src/activity_indicator.rs | 1 + crates/language/src/language_registry.rs | 1 + crates/language_tools/src/lsp_tool.rs | 2 ++ crates/project/src/lsp_store.rs | 6 +++++- 4 files changed, 9 insertions(+), 1 deletion(-) diff --git a/crates/activity_indicator/src/activity_indicator.rs b/crates/activity_indicator/src/activity_indicator.rs index 3cffceac21..b0433da15c 100644 --- a/crates/activity_indicator/src/activity_indicator.rs +++ b/crates/activity_indicator/src/activity_indicator.rs @@ -466,6 +466,7 @@ impl ActivityIndicator { failed.push(status.name.clone()); } LanguageServerStatusUpdate::Binary(BinaryStatus::None) => {} + LanguageServerStatusUpdate::Binary(BinaryStatus::NotAvailable) => {} LanguageServerStatusUpdate::Health(health, server_status) => match server_status { Some(server_status) => { health_messages.push((status.name.clone(), *health, server_status.clone())); diff --git a/crates/language/src/language_registry.rs b/crates/language/src/language_registry.rs index ab3c0f9b37..b33f25b53d 100644 --- a/crates/language/src/language_registry.rs +++ b/crates/language/src/language_registry.rs @@ -161,6 +161,7 @@ pub enum BinaryStatus { Stopping, Stopped, Failed { error: String }, + NotAvailable, } #[derive(Clone)] diff --git a/crates/language_tools/src/lsp_tool.rs b/crates/language_tools/src/lsp_tool.rs index 9e95ed4673..e5ad392e4b 100644 --- a/crates/language_tools/src/lsp_tool.rs +++ b/crates/language_tools/src/lsp_tool.rs @@ -226,6 +226,7 @@ impl LanguageServerState { BinaryStatus::Stopping => Some(Color::Disabled), BinaryStatus::Stopped => Some(Color::Disabled), BinaryStatus::Failed { .. } => Some(Color::Error), + BinaryStatus::NotAvailable => Some(Color::Info), }) .or_else(|| { Some(match server_info.health? { @@ -774,6 +775,7 @@ impl LspTool { } BinaryStatus::Stopped => {} BinaryStatus::Failed { .. } => {} + BinaryStatus::NotAvailable => {} } match server_names_to_worktrees.get(server_name) { diff --git a/crates/project/src/lsp_store.rs b/crates/project/src/lsp_store.rs index a1a050f320..e36934bb53 100644 --- a/crates/project/src/lsp_store.rs +++ b/crates/project/src/lsp_store.rs @@ -367,7 +367,7 @@ impl LocalLspStore { } Err(SilentError::Silent) => { - delegate.update_status(adapter.name(), BinaryStatus::Stopped); + delegate.update_status(adapter.name(), BinaryStatus::NotAvailable); None } @@ -11333,6 +11333,10 @@ fn subscribe_to_binary_statuses( message = Some(error); proto::ServerBinaryStatus::Failed } + BinaryStatus::NotAvailable => { + message = Some("The binary for this language server is not available.".to_string()); + proto::ServerBinaryStatus::Stopped + } }; cx.emit(LspStoreEvent::LanguageServerUpdate { // Binary updates are about the binary that might not have any language server id at that point.