fix lsp restart (#10614)

This commit is contained in:
Pascal Kuthe 2024-04-28 05:11:17 +02:00 committed by GitHub
parent bc03b6b5fe
commit a1d7997fe3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -736,7 +736,15 @@ impl Registry {
.language_servers .language_servers
.iter() .iter()
.filter_map(|LanguageServerFeatures { name, .. }| { .filter_map(|LanguageServerFeatures { name, .. }| {
if self.inner_by_name.contains_key(name) { if let Some(old_clients) = self.inner_by_name.remove(name) {
for old_client in old_clients {
self.file_event_handler.remove_client(old_client.id());
self.inner.remove(old_client.id());
tokio::spawn(async move {
let _ = old_client.force_shutdown().await;
});
}
}
let client = match self.start_client( let client = match self.start_client(
name.clone(), name.clone(),
language_config, language_config,
@ -748,23 +756,10 @@ impl Registry {
Err(StartupError::NoRequiredRootFound) => return None, Err(StartupError::NoRequiredRootFound) => return None,
Err(StartupError::Error(err)) => return Some(Err(err)), Err(StartupError::Error(err)) => return Some(Err(err)),
}; };
let old_clients = self self.inner_by_name
.inner_by_name .insert(name.to_owned(), vec![client.clone()]);
.insert(name.clone(), vec![client.clone()])
.unwrap();
for old_client in old_clients {
self.file_event_handler.remove_client(old_client.id());
self.inner.remove(client.id());
tokio::spawn(async move {
let _ = old_client.force_shutdown().await;
});
}
Some(Ok(client)) Some(Ok(client))
} else {
None
}
}) })
.collect() .collect()
} }