From 3e4bac1d964cc29939b396a7e1e9ebd7feda5e0a Mon Sep 17 00:00:00 2001 From: Philipp Mildenberger Date: Sun, 2 Apr 2023 20:05:26 +0200 Subject: [PATCH] Fix lsp_restart across multiple different document scopes (language servers weren't restarted, if not of the same scope id), and fix some smaller rebase issues --- helix-lsp/src/lib.rs | 10 +++------- helix-term/src/commands/typed.rs | 12 ++++++++++-- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/helix-lsp/src/lib.rs b/helix-lsp/src/lib.rs index 6b4bb4309..3fd9c2bf7 100644 --- a/helix-lsp/src/lib.rs +++ b/helix-lsp/src/lib.rs @@ -691,7 +691,6 @@ impl Registry { .language_servers .iter() .filter_map(|LanguageServerFeatures { name, .. }| { - // #[allow(clippy::map_entry)] if self.inner.contains_key(name) { let client = match self.start_client( name.clone(), @@ -708,7 +707,7 @@ impl Registry { .insert(name.clone(), vec![client.clone()]) .unwrap(); - // TODO what if there are different language servers for different workspaces, + // TODO what if there are multiple instances for different workspaces? // I think the language servers will be stopped without being restarted, which is not intended for old_client in old_clients { tokio::spawn(async move { @@ -745,15 +744,12 @@ impl Registry { .language_servers .iter() .map(|LanguageServerFeatures { name, .. }| { - if let Some(clients) = self.inner.get_mut(name) { - // clients.find( - - if let Some((_, client)) = clients.iter_mut().enumerate().find(|(i, client)| { + if let Some(clients) = self.inner.get(name) { + if let Some((_, client)) = clients.iter().enumerate().find(|(i, client)| { client.try_add_doc(&language_config.roots, root_dirs, doc_path, *i == 0) }) { return Ok((name.to_owned(), client.clone())); } - // return Ok((name.clone(), clients.clone())); } let client = self.start_client( name.clone(), diff --git a/helix-term/src/commands/typed.rs b/helix-term/src/commands/typed.rs index 9ab2aa4fa..706442e45 100644 --- a/helix-term/src/commands/typed.rs +++ b/helix-term/src/commands/typed.rs @@ -1404,7 +1404,6 @@ fn lsp_restart( .language_config() .context("LSP not defined for the current document")?; - let scope = config.scope.clone(); cx.editor.language_servers.restart( config, doc.path(), @@ -1417,7 +1416,16 @@ fn lsp_restart( .editor .documents() .filter_map(|doc| match doc.language_config() { - Some(config) if config.scope.eq(&scope) => Some(doc.id()), + Some(config) + if config.language_servers.iter().any(|ls| { + config + .language_servers + .iter() + .any(|restarted_ls| restarted_ls.name == ls.name) + }) => + { + Some(doc.id()) + } _ => None, }) .collect();