From 6e21fa9a6af1e345a8dea595da922aab93f26826 Mon Sep 17 00:00:00 2001 From: Lukas Wirth Date: Tue, 6 Jan 2026 14:51:48 +0100 Subject: [PATCH] project: Fix LSP requests failing for remotes for builtin servers (#46156) Closes https://github.com/zed-industries/zed/issues/45928 Release Notes: - Fixed builtin python language servers not correctly working on ssh remotes --- crates/language/src/language_registry.rs | 6 ++++++ crates/project/src/lsp_store.rs | 24 ++++++++++++++++-------- crates/zed/build.rs | 2 +- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/crates/language/src/language_registry.rs b/crates/language/src/language_registry.rs index 9bdde8a5fa424627174f4c9f0d86302baff8b5e5..67c48eb097a3948079608cf448706e6e319e2b7a 100644 --- a/crates/language/src/language_registry.rs +++ b/crates/language/src/language_registry.rs @@ -408,6 +408,12 @@ impl LanguageRegistry { Some(load_lsp_adapter()) } + /// Checks if a language server adapter with the given name is available to be loaded. + pub fn is_lsp_adapter_available(&self, name: &LanguageServerName) -> bool { + let state = self.state.read(); + state.available_lsp_adapters.contains_key(name) + } + pub fn register_lsp_adapter(&self, language_name: LanguageName, adapter: Arc) { let mut state = self.state.write(); diff --git a/crates/project/src/lsp_store.rs b/crates/project/src/lsp_store.rs index bd2bd72e4a92872d2a5c8287ced8aa31448afd85..d9c74da8cb93c8f43004cb34b185b20d04bb1bbf 100644 --- a/crates/project/src/lsp_store.rs +++ b/crates/project/src/lsp_store.rs @@ -4665,7 +4665,7 @@ impl LspStore { let Some(language) = buffer.read(cx).language().cloned() else { return false; }; - let relevant_language_servers = self + let registered_language_servers = self .languages .lsp_adapters(&language.name()) .into_iter() @@ -4674,9 +4674,13 @@ impl LspStore { self.language_server_statuses .iter() .filter_map(|(server_id, server_status)| { - relevant_language_servers - .contains(&server_status.name) - .then_some(server_id) + // Include servers that are either registered for this language OR + // available to be loaded (for SSH remote mode where adapters like + // ty/pylsp/pyright are registered via register_available_lsp_adapter + // but only loaded on the server side) + let is_relevant = registered_language_servers.contains(&server_status.name) + || self.languages.is_lsp_adapter_available(&server_status.name); + is_relevant.then_some(server_id) }) .filter_map(|server_id| self.lsp_server_capabilities.get(server_id)) .any(check) @@ -4694,7 +4698,7 @@ impl LspStore { let Some(language) = buffer.read(cx).language().cloned() else { return Vec::default(); }; - let relevant_language_servers = self + let registered_language_servers = self .languages .lsp_adapters(&language.name()) .into_iter() @@ -4703,9 +4707,13 @@ impl LspStore { self.language_server_statuses .iter() .filter_map(|(server_id, server_status)| { - relevant_language_servers - .contains(&server_status.name) - .then_some((server_id, &server_status.name)) + // Include servers that are either registered for this language OR + // available to be loaded (for SSH remote mode where adapters like + // ty/pylsp/pyright are registered via register_available_lsp_adapter + // but only loaded on the server side) + let is_relevant = registered_language_servers.contains(&server_status.name) + || self.languages.is_lsp_adapter_available(&server_status.name); + is_relevant.then_some((server_id, &server_status.name)) }) .filter_map(|(server_id, server_name)| { self.lsp_server_capabilities diff --git a/crates/zed/build.rs b/crates/zed/build.rs index 18139a679d6eb4990b039e1276062e3071cdd40f..7e22752d35d9115efd735bfc7b2690f4bf5680d3 100644 --- a/crates/zed/build.rs +++ b/crates/zed/build.rs @@ -66,7 +66,7 @@ fn main() { let open_console_target = target_dir.join("OpenConsole.exe"); let conpty_url = "https://github.com/microsoft/terminal/releases/download/v1.23.13503.0/Microsoft.Windows.Console.ConPTY.1.23.251216003.nupkg"; - let nupkg_path = out_dir.join("conpty.nupkg"); + let nupkg_path = out_dir.join("conpty.nupkg.zip"); let extract_dir = out_dir.join("conpty"); let download_script = format!(