diff options
| author | Alex Kirszenberg <alexandre@amo.co> | 2025-01-07 11:11:04 +0100 |
|---|---|---|
| committer | Alex Kirszenberg <alexandre@amo.co> | 2025-01-07 11:11:04 +0100 |
| commit | 929496521799f8e479ec3cafc63eec14e54c97e4 (patch) | |
| tree | 76c9079483f5c68e951f6bd259977c1dec83b3a0 /src | |
| parent | 9344334b19c6123933af222bef1d714aff3ada0c (diff) | |
| download | rust-929496521799f8e479ec3cafc63eec14e54c97e4.tar.gz rust-929496521799f8e479ec3cafc63eec14e54c97e4.zip | |
fix: Fix diagnostics not clearing between flychecks
Diffstat (limited to 'src')
| -rw-r--r-- | src/tools/rust-analyzer/crates/rust-analyzer/src/flycheck.rs | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/tools/rust-analyzer/crates/rust-analyzer/src/flycheck.rs b/src/tools/rust-analyzer/crates/rust-analyzer/src/flycheck.rs index a306302cc0e..36483699ac6 100644 --- a/src/tools/rust-analyzer/crates/rust-analyzer/src/flycheck.rs +++ b/src/tools/rust-analyzer/crates/rust-analyzer/src/flycheck.rs @@ -233,6 +233,7 @@ struct FlycheckActor { /// The receiver side of the channel mentioned above. command_receiver: Option<Receiver<CargoCheckMessage>>, diagnostics_cleared_for: FxHashSet<Arc<PackageId>>, + 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; } |
