Invalidate active diagnostic when its primary range collapses

Co-Authored-By: Nathan Sobo <nathan@zed.dev>
This commit is contained in:
Antonio Scandurra 2021-11-19 16:38:23 +01:00
parent b0afc80678
commit c844fcdc09

View file

@ -344,7 +344,6 @@ struct ActiveDiagnosticGroup {
primary_message: String, primary_message: String,
blocks: HashMap<BlockId, Diagnostic>, blocks: HashMap<BlockId, Diagnostic>,
is_valid: bool, is_valid: bool,
update_count: usize,
} }
#[derive(Serialize, Deserialize)] #[derive(Serialize, Deserialize)]
@ -2277,14 +2276,12 @@ impl Editor {
fn refresh_active_diagnostics(&mut self, cx: &mut ViewContext<Editor>) { fn refresh_active_diagnostics(&mut self, cx: &mut ViewContext<Editor>) {
if let Some(active_diagnostics) = self.active_diagnostics.as_mut() { if let Some(active_diagnostics) = self.active_diagnostics.as_mut() {
let buffer = self.buffer.read(cx); let buffer = self.buffer.read(cx);
let update_count = buffer.diagnostics_update_count();
if update_count > active_diagnostics.update_count {
active_diagnostics.update_count = update_count;
let primary_range_start = active_diagnostics.primary_range.start.to_offset(buffer); let primary_range_start = active_diagnostics.primary_range.start.to_offset(buffer);
let is_valid = buffer let is_valid = buffer
.diagnostics_in_range::<_, usize>(active_diagnostics.primary_range.clone()) .diagnostics_in_range::<_, usize>(active_diagnostics.primary_range.clone())
.any(|(range, diagnostic)| { .any(|(range, diagnostic)| {
diagnostic.is_primary diagnostic.is_primary
&& !range.is_empty()
&& range.start == primary_range_start && range.start == primary_range_start
&& diagnostic.message == active_diagnostics.primary_message && diagnostic.message == active_diagnostics.primary_message
}); });
@ -2325,14 +2322,12 @@ impl Editor {
} }
} }
} }
}
fn activate_diagnostics(&mut self, group_id: usize, cx: &mut ViewContext<Self>) { fn activate_diagnostics(&mut self, group_id: usize, cx: &mut ViewContext<Self>) {
self.dismiss_diagnostics(cx); self.dismiss_diagnostics(cx);
self.active_diagnostics = self.display_map.update(cx, |display_map, cx| { self.active_diagnostics = self.display_map.update(cx, |display_map, cx| {
let buffer = self.buffer.read(cx); let buffer = self.buffer.read(cx);
let update_count = buffer.diagnostics_update_count();
let mut primary_range = None; let mut primary_range = None;
let mut primary_message = None; let mut primary_message = None;
let mut group_end = Point::zero(); let mut group_end = Point::zero();
@ -2400,7 +2395,6 @@ impl Editor {
primary_message, primary_message,
blocks, blocks,
is_valid: true, is_valid: true,
update_count,
}) })
}); });
} }