on master help sign in
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
3e4bac1Philipp Mildenberger
helix-lsp/src/lib.rs+3−7
@@ -691,7 +691,6 @@ impl Registry {
691 .language_servers
691 .language_servers
692 .iter()
692 .iter()
693 .filter_map(|LanguageServerFeatures { name, .. }| {
693 .filter_map(|LanguageServerFeatures { name, .. }| {
694− // #[allow(clippy::map_entry)]
695 if self.inner.contains_key(name) {
694 if self.inner.contains_key(name) {
696 let client = match self.start_client(
695 let client = match self.start_client(
697 name.clone(),
696 name.clone(),
@@ -708,7 +707,7 @@ impl Registry {
708 .insert(name.clone(), vec![client.clone()])
707 .insert(name.clone(), vec![client.clone()])
709 .unwrap();
708 .unwrap();
710
709
711− // TODO what if there are different language servers for different workspaces,
710+ // TODO what if there are multiple instances for different workspaces?
712 // I think the language servers will be stopped without being restarted, which is not intended
711 // I think the language servers will be stopped without being restarted, which is not intended
713 for old_client in old_clients {
712 for old_client in old_clients {
714 tokio::spawn(async move {
713 tokio::spawn(async move {
@@ -745,15 +744,12 @@ impl Registry {
745 .language_servers
744 .language_servers
746 .iter()
745 .iter()
747 .map(|LanguageServerFeatures { name, .. }| {
746 .map(|LanguageServerFeatures { name, .. }| {
748− if let Some(clients) = self.inner.get_mut(name) {
747+ if let Some(clients) = self.inner.get(name) {
749− // clients.find(
750−
751− if let Some((_, client)) = clients.iter_mut().enumerate().find(|(i, client)| {
748+ if let Some((_, client)) = clients.iter().enumerate().find(|(i, client)| {
752 client.try_add_doc(&language_config.roots, root_dirs, doc_path, *i == 0)
749 client.try_add_doc(&language_config.roots, root_dirs, doc_path, *i == 0)
753 }) {
750 }) {
754 return Ok((name.to_owned(), client.clone()));
751 return Ok((name.to_owned(), client.clone()));
755 }
752 }
756− // return Ok((name.clone(), clients.clone()));
757 }
753 }
758 let client = self.start_client(
754 let client = self.start_client(
759 name.clone(),
755 name.clone(),
helix-term/src/commands/typed.rs+10−2
@@ -1404,7 +1404,6 @@ fn lsp_restart(
1404 .language_config()
1404 .language_config()
1405 .context("LSP not defined for the current document")?;
1405 .context("LSP not defined for the current document")?;
1406
1406
1407− let scope = config.scope.clone();
1408 cx.editor.language_servers.restart(
1407 cx.editor.language_servers.restart(
1409 config,
1408 config,
1410 doc.path(),
1409 doc.path(),
@@ -1417,7 +1416,16 @@ fn lsp_restart(
1417 .editor
1416 .editor
1418 .documents()
1417 .documents()
1419 .filter_map(|doc| match doc.language_config() {
1418 .filter_map(|doc| match doc.language_config() {
1420− Some(config) if config.scope.eq(&scope) => Some(doc.id()),
1419+ Some(config)
1420+ if config.language_servers.iter().any(|ls| {
1421+ config
1422+ .language_servers
1423+ .iter()
1424+ .any(|restarted_ls| restarted_ls.name == ls.name)
1425+ }) =>
1426+ {
1427+ Some(doc.id())
1428+ }
1421 _ => None,
1429 _ => None,
1422 })
1430 })
1423 .collect();
1431 .collect();