Unnamed repository; edit this file 'description' to name the repository.
fix diagnostics clearing when flychecks run per-workspace
| -rw-r--r-- | crates/rust-analyzer/src/global_state.rs | 4 | ||||
| -rw-r--r-- | crates/rust-analyzer/src/main_loop.rs | 8 |
2 files changed, 6 insertions, 6 deletions
diff --git a/crates/rust-analyzer/src/global_state.rs b/crates/rust-analyzer/src/global_state.rs index 79b87ecd58..0c2e60fcc9 100644 --- a/crates/rust-analyzer/src/global_state.rs +++ b/crates/rust-analyzer/src/global_state.rs @@ -87,7 +87,7 @@ pub(crate) struct GlobalState { pub(crate) flycheck_sender: Sender<flycheck::Message>, pub(crate) flycheck_receiver: Receiver<flycheck::Message>, pub(crate) last_flycheck_error: Option<String>, - pub(crate) diagnostics_received: bool, + pub(crate) diagnostics_received: FxHashMap<usize, bool>, // Test explorer pub(crate) test_run_session: Option<Vec<flycheck::CargoTestHandle>>, @@ -225,7 +225,7 @@ impl GlobalState { flycheck_sender, flycheck_receiver, last_flycheck_error: None, - diagnostics_received: false, + diagnostics_received: FxHashMap::default(), test_run_session: None, test_run_sender, diff --git a/crates/rust-analyzer/src/main_loop.rs b/crates/rust-analyzer/src/main_loop.rs index 7acd302867..a94ca871bd 100644 --- a/crates/rust-analyzer/src/main_loop.rs +++ b/crates/rust-analyzer/src/main_loop.rs @@ -804,9 +804,9 @@ impl GlobalState { fn handle_flycheck_msg(&mut self, message: flycheck::Message) { match message { flycheck::Message::AddDiagnostic { id, workspace_root, diagnostic } => { - if !self.diagnostics_received { + if !self.diagnostics_received.get(&id).copied().unwrap_or_default() { self.diagnostics.clear_check(id); - self.diagnostics_received = true; + self.diagnostics_received.insert(id, true); } let snap = self.snapshot(); let diagnostics = crate::diagnostics::to_proto::map_rust_diagnostic_to_lsp( @@ -836,7 +836,7 @@ impl GlobalState { flycheck::Message::Progress { id, progress } => { let (state, message) = match progress { flycheck::Progress::DidStart => { - self.diagnostics_received = false; + self.diagnostics_received.insert(id, false); (Progress::Begin, None) } flycheck::Progress::DidCheckCrate(target) => (Progress::Report, Some(target)), @@ -852,7 +852,7 @@ impl GlobalState { flycheck::Progress::DidFinish(result) => { self.last_flycheck_error = result.err().map(|err| format!("cargo check failed to start: {err}")); - if !self.diagnostics_received { + if !self.diagnostics_received.get(&id).copied().unwrap_or_default() { self.diagnostics.clear_check(id); } (Progress::End, None) |