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:
parent
aabce921e3
commit
29fa6d1a4d
1 changed files with 11 additions and 27 deletions
|
@ -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()
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue