@@ -1442,62 +1442,19 @@ fn lsp_stop(
1442 return Ok(());
1442 return Ok(());
1445− let doc = doc!(cx.editor);
1445+ let ls_shutdown_names = doc!(cx.editor)
1447− // TODO this stops language servers which may be used in another doc/language type that uses the same language servers
1448− // I'm not sure if this is really what we want
1449− let ls_shutdown_names = doc
1450 .language_servers()
1446 .language_servers()
1451− .map(|ls| ls.name())
1447+ .map(|ls| ls.name().to_string())
1452 .collect::<Vec<_>>();
1448 .collect::<Vec<_>>();
1454 for ls_name in &ls_shutdown_names {
1450 for ls_name in &ls_shutdown_names {
1455 cx.editor.language_servers.stop(ls_name);
1451 cx.editor.language_servers.stop(ls_name);
1458− let doc_ids_active_clients: Vec<_> = cx
1453+ for doc in cx.editor.documents_mut() {
1459− .editor
1454+ if let Some(client) = doc.remove_language_server_by_name(ls_name) {
1460− .documents()
1455+ doc.clear_diagnostics(client.id());
1461− .filter_map(|doc| {
1462− let doc_active_ls_ids: Vec<_> = doc
1463− .language_servers()
1464− .filter(|ls| !ls_shutdown_names.contains(&ls.name()))
1468− let active_clients: Vec<_> = cx
1472− .filter(|client| doc_active_ls_ids.contains(&client.id()))
1476− if active_clients.len() != doc.language_servers().count() {
1477− Some((doc.id(), active_clients))
1484− for (doc_id, active_clients) in doc_ids_active_clients {
1485− let doc = cx.editor.documents.get_mut(&doc_id).unwrap();
1487− let stopped_clients: Vec<_> = doc
1488− .language_servers()
1492− .any(|active_ls| active_ls.id() == ls.id())
1495− .collect(); // is necessary because of borrow-checking
1497− for client_id in stopped_clients {
1498− doc.clear_diagnostics(client_id)
1500− doc.set_language_servers(active_clients);