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,
lsp_tree: Entity<LanguageServerTree>,
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 {
@ -2299,9 +2299,9 @@ impl LocalLspStore {
buffer.update(cx, |buffer, cx| {
if let Some(abs_path) = File::from_dyn(buffer.file()).map(|f| f.abs_path(cx)) {
self.buffer_pull_diagnostics_result_ids
.entry(abs_path)
.entry(server_id)
.or_default()
.insert(server_id, result_id);
.insert(abs_path, result_id);
}
buffer.update_diagnostics(server_id, set, cx)
@ -3144,9 +3144,8 @@ impl LocalLspStore {
self.last_workspace_edits_by_language_server
.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() {
values_per_server.remove(server_id_to_remove);
}
self.buffer_pull_diagnostics_result_ids
.remove(server_id_to_remove);
cx.emit(LspStoreEvent::LanguageServerRemoved(*server_id_to_remove));
}
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) {
if let Some(local) = self.as_local_mut() {
for values_per_server in local.buffer_pull_diagnostics_result_ids.values_mut() {
values_per_server.remove(&for_server);
}
local.buffer_pull_diagnostics_result_ids.remove(&for_server);
}
}
@ -9757,8 +9741,8 @@ impl LspStore {
.map(|f| f.abs_path(cx))?;
self.as_local()?
.buffer_pull_diagnostics_result_ids
.get(&abs_path)?
.get(&server_id)?
.get(&abs_path)?
.clone()
}
@ -9768,10 +9752,10 @@ impl LspStore {
};
local
.buffer_pull_diagnostics_result_ids
.iter()
.filter_map(|(file_path, result_ids)| {
Some((file_path.clone(), result_ids.get(&server_id)?.clone()?))
})
.get(&server_id)
.into_iter()
.flatten()
.filter_map(|(abs_path, result_id)| Some((abs_path.clone(), result_id.clone()?)))
.collect()
}