From f2b789c36e7d44b1b0418994fbc61f4e430d57b3 Mon Sep 17 00:00:00 2001 From: Alex Kirszenberg Date: Tue, 7 Jan 2025 11:11:04 +0100 Subject: [PATCH 1/2] fix: Fix diagnostics not clearing between flychecks --- crates/rust-analyzer/src/flycheck.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/crates/rust-analyzer/src/flycheck.rs b/crates/rust-analyzer/src/flycheck.rs index a306302cc0..36483699ac 100644 --- a/crates/rust-analyzer/src/flycheck.rs +++ b/crates/rust-analyzer/src/flycheck.rs @@ -233,6 +233,7 @@ struct FlycheckActor { /// The receiver side of the channel mentioned above. command_receiver: Option>, diagnostics_cleared_for: FxHashSet>, + diagnostics_cleared_for_all: bool, diagnostics_received: bool, } @@ -264,6 +265,7 @@ impl FlycheckActor { command_handle: None, command_receiver: None, diagnostics_cleared_for: Default::default(), + diagnostics_cleared_for_all: false, diagnostics_received: false, } } @@ -350,6 +352,7 @@ impl FlycheckActor { package_id: None, }); } + self.clear_diagnostics_state(); self.report_progress(Progress::DidFinish(res)); } @@ -395,6 +398,14 @@ impl FlycheckActor { package_id: Some(package_id.clone()), }); } + } else { + if !self.diagnostics_cleared_for_all { + self.diagnostics_cleared_for_all = true; + self.send(FlycheckMessage::ClearDiagnostics { + id: self.id, + package_id: None, + }); + } } self.send(FlycheckMessage::AddDiagnostic { id: self.id, @@ -420,7 +431,12 @@ impl FlycheckActor { self.command_receiver.take(); self.report_progress(Progress::DidCancel); } + self.clear_diagnostics_state(); + } + + fn clear_diagnostics_state(&mut self) { self.diagnostics_cleared_for.clear(); + self.diagnostics_cleared_for_all = false; self.diagnostics_received = false; } From fe54502f11bb291967fd6fb487be144c10b191a1 Mon Sep 17 00:00:00 2001 From: Alex Kirszenberg Date: Tue, 7 Jan 2025 12:07:37 +0100 Subject: [PATCH 2/2] lint --- crates/rust-analyzer/src/flycheck.rs | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/crates/rust-analyzer/src/flycheck.rs b/crates/rust-analyzer/src/flycheck.rs index 36483699ac..ed74d9cf3b 100644 --- a/crates/rust-analyzer/src/flycheck.rs +++ b/crates/rust-analyzer/src/flycheck.rs @@ -398,14 +398,12 @@ impl FlycheckActor { package_id: Some(package_id.clone()), }); } - } else { - if !self.diagnostics_cleared_for_all { - self.diagnostics_cleared_for_all = true; - self.send(FlycheckMessage::ClearDiagnostics { - id: self.id, - package_id: None, - }); - } + } else if !self.diagnostics_cleared_for_all { + self.diagnostics_cleared_for_all = true; + self.send(FlycheckMessage::ClearDiagnostics { + id: self.id, + package_id: None, + }); } self.send(FlycheckMessage::AddDiagnostic { id: self.id,