Regroup result_ids (#32710)

Do not cleanup the result_id data on buffer drop, as this data is meant
to be stored between buffer reopens.
Use `LanguageServerId` as keys as this way it's simpler to access the
data.

Follow-up of https://github.com/zed-industries/zed/pull/32403

Release Notes:

- N/A
This commit is contained in:
Kirill Bulatov 2025-06-13 21:56:10 +03:00 committed by GitHub
parent aabce921e3
commit 29fa6d1a4d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -166,7 +166,7 @@ pub struct LocalLspStore {
_subscription: gpui::Subscription, _subscription: gpui::Subscription,
lsp_tree: Entity<LanguageServerTree>, lsp_tree: Entity<LanguageServerTree>,
registered_buffers: HashMap<BufferId, usize>, registered_buffers: HashMap<BufferId, usize>,
buffer_pull_diagnostics_result_ids: HashMap<PathBuf, HashMap<LanguageServerId, Option<String>>>, buffer_pull_diagnostics_result_ids: HashMap<LanguageServerId, HashMap<PathBuf, Option<String>>>,
} }
impl LocalLspStore { impl LocalLspStore {
@ -2299,9 +2299,9 @@ impl LocalLspStore {
buffer.update(cx, |buffer, cx| { buffer.update(cx, |buffer, cx| {
if let Some(abs_path) = File::from_dyn(buffer.file()).map(|f| f.abs_path(cx)) { if let Some(abs_path) = File::from_dyn(buffer.file()).map(|f| f.abs_path(cx)) {
self.buffer_pull_diagnostics_result_ids self.buffer_pull_diagnostics_result_ids
.entry(abs_path) .entry(server_id)
.or_default() .or_default()
.insert(server_id, result_id); .insert(abs_path, result_id);
} }
buffer.update_diagnostics(server_id, set, cx) buffer.update_diagnostics(server_id, set, cx)
@ -3144,9 +3144,8 @@ impl LocalLspStore {
self.last_workspace_edits_by_language_server self.last_workspace_edits_by_language_server
.remove(server_id_to_remove); .remove(server_id_to_remove);
self.language_servers.remove(server_id_to_remove); self.language_servers.remove(server_id_to_remove);
for values_per_server in self.buffer_pull_diagnostics_result_ids.values_mut() { self.buffer_pull_diagnostics_result_ids
values_per_server.remove(server_id_to_remove); .remove(server_id_to_remove);
}
cx.emit(LspStoreEvent::LanguageServerRemoved(*server_id_to_remove)); cx.emit(LspStoreEvent::LanguageServerRemoved(*server_id_to_remove));
} }
servers_to_remove.into_keys().collect() servers_to_remove.into_keys().collect()
@ -3801,19 +3800,6 @@ impl LspStore {
} }
} }
} }
BufferStoreEvent::BufferDropped(buffer_id) => {
let abs_path = self
.buffer_store
.read(cx)
.get(*buffer_id)
.and_then(|b| File::from_dyn(b.read(cx).file()))
.map(|f| f.abs_path(cx));
if let Some(local) = self.as_local_mut() {
if let Some(abs_path) = abs_path {
local.buffer_pull_diagnostics_result_ids.remove(&abs_path);
}
}
}
_ => {} _ => {}
} }
} }
@ -9737,9 +9723,7 @@ impl LspStore {
fn remove_result_ids(&mut self, for_server: LanguageServerId) { fn remove_result_ids(&mut self, for_server: LanguageServerId) {
if let Some(local) = self.as_local_mut() { if let Some(local) = self.as_local_mut() {
for values_per_server in local.buffer_pull_diagnostics_result_ids.values_mut() { local.buffer_pull_diagnostics_result_ids.remove(&for_server);
values_per_server.remove(&for_server);
}
} }
} }
@ -9757,8 +9741,8 @@ impl LspStore {
.map(|f| f.abs_path(cx))?; .map(|f| f.abs_path(cx))?;
self.as_local()? self.as_local()?
.buffer_pull_diagnostics_result_ids .buffer_pull_diagnostics_result_ids
.get(&abs_path)?
.get(&server_id)? .get(&server_id)?
.get(&abs_path)?
.clone() .clone()
} }
@ -9768,10 +9752,10 @@ impl LspStore {
}; };
local local
.buffer_pull_diagnostics_result_ids .buffer_pull_diagnostics_result_ids
.iter() .get(&server_id)
.filter_map(|(file_path, result_ids)| { .into_iter()
Some((file_path.clone(), result_ids.get(&server_id)?.clone()?)) .flatten()
}) .filter_map(|(abs_path, result_id)| Some((abs_path.clone(), result_id.clone()?)))
.collect() .collect()
} }