From 58c913ce4567a95c52808d78245eb1dac806971c Mon Sep 17 00:00:00 2001 From: Philipp Mildenberger Date: Sun, 19 Mar 2023 19:26:39 +0100 Subject: Simplify 'lsp_stop' command --- helix-term/src/commands/typed.rs | 53 ++++------------------------------------ 1 file changed, 5 insertions(+), 48 deletions(-) (limited to 'helix-term/src/commands') diff --git a/helix-term/src/commands/typed.rs b/helix-term/src/commands/typed.rs index 5f94b7c4..8cfc9fd2 100644 --- a/helix-term/src/commands/typed.rs +++ b/helix-term/src/commands/typed.rs @@ -1442,62 +1442,19 @@ fn lsp_stop( return Ok(()); } - let doc = doc!(cx.editor); - - // TODO this stops language servers which may be used in another doc/language type that uses the same language servers - // I'm not sure if this is really what we want - let ls_shutdown_names = doc + let ls_shutdown_names = doc!(cx.editor) .language_servers() - .map(|ls| ls.name()) + .map(|ls| ls.name().to_string()) .collect::>(); for ls_name in &ls_shutdown_names { cx.editor.language_servers.stop(ls_name); - } - let doc_ids_active_clients: Vec<_> = cx - .editor - .documents() - .filter_map(|doc| { - let doc_active_ls_ids: Vec<_> = doc - .language_servers() - .filter(|ls| !ls_shutdown_names.contains(&ls.name())) - .map(|ls| ls.id()) - .collect(); - - let active_clients: Vec<_> = cx - .editor - .language_servers - .iter_clients() - .filter(|client| doc_active_ls_ids.contains(&client.id())) - .map(Clone::clone) - .collect(); - - if active_clients.len() != doc.language_servers().count() { - Some((doc.id(), active_clients)) - } else { - None + for doc in cx.editor.documents_mut() { + if let Some(client) = doc.remove_language_server_by_name(ls_name) { + doc.clear_diagnostics(client.id()); } - }) - .collect(); - - for (doc_id, active_clients) in doc_ids_active_clients { - let doc = cx.editor.documents.get_mut(&doc_id).unwrap(); - - let stopped_clients: Vec<_> = doc - .language_servers() - .filter(|ls| { - !active_clients - .iter() - .any(|active_ls| active_ls.id() == ls.id()) - }) - .map(|ls| ls.id()) - .collect(); // is necessary because of borrow-checking - - for client_id in stopped_clients { - doc.clear_diagnostics(client_id) } - doc.set_language_servers(active_clients); } Ok(()) -- cgit v1.2.3-70-g09d2