mirror of
https://github.com/rust-lang/rust-analyzer
synced 2025-01-15 06:33:58 +00:00
Clear diagnostics only after new ones were received
This commit is contained in:
parent
83ba420431
commit
4d9346922a
2 changed files with 10 additions and 1 deletions
|
@ -87,6 +87,7 @@ pub(crate) struct GlobalState {
|
||||||
pub(crate) flycheck_sender: Sender<flycheck::Message>,
|
pub(crate) flycheck_sender: Sender<flycheck::Message>,
|
||||||
pub(crate) flycheck_receiver: Receiver<flycheck::Message>,
|
pub(crate) flycheck_receiver: Receiver<flycheck::Message>,
|
||||||
pub(crate) last_flycheck_error: Option<String>,
|
pub(crate) last_flycheck_error: Option<String>,
|
||||||
|
pub(crate) diagnostics_received: bool,
|
||||||
|
|
||||||
// Test explorer
|
// Test explorer
|
||||||
pub(crate) test_run_session: Option<Vec<flycheck::CargoTestHandle>>,
|
pub(crate) test_run_session: Option<Vec<flycheck::CargoTestHandle>>,
|
||||||
|
@ -224,6 +225,7 @@ impl GlobalState {
|
||||||
flycheck_sender,
|
flycheck_sender,
|
||||||
flycheck_receiver,
|
flycheck_receiver,
|
||||||
last_flycheck_error: None,
|
last_flycheck_error: None,
|
||||||
|
diagnostics_received: false,
|
||||||
|
|
||||||
test_run_session: None,
|
test_run_session: None,
|
||||||
test_run_sender,
|
test_run_sender,
|
||||||
|
|
|
@ -804,6 +804,10 @@ impl GlobalState {
|
||||||
fn handle_flycheck_msg(&mut self, message: flycheck::Message) {
|
fn handle_flycheck_msg(&mut self, message: flycheck::Message) {
|
||||||
match message {
|
match message {
|
||||||
flycheck::Message::AddDiagnostic { id, workspace_root, diagnostic } => {
|
flycheck::Message::AddDiagnostic { id, workspace_root, diagnostic } => {
|
||||||
|
if !self.diagnostics_received {
|
||||||
|
self.diagnostics.clear_check(id);
|
||||||
|
self.diagnostics_received = true;
|
||||||
|
}
|
||||||
let snap = self.snapshot();
|
let snap = self.snapshot();
|
||||||
let diagnostics = crate::diagnostics::to_proto::map_rust_diagnostic_to_lsp(
|
let diagnostics = crate::diagnostics::to_proto::map_rust_diagnostic_to_lsp(
|
||||||
&self.config.diagnostics_map(),
|
&self.config.diagnostics_map(),
|
||||||
|
@ -832,7 +836,7 @@ impl GlobalState {
|
||||||
flycheck::Message::Progress { id, progress } => {
|
flycheck::Message::Progress { id, progress } => {
|
||||||
let (state, message) = match progress {
|
let (state, message) = match progress {
|
||||||
flycheck::Progress::DidStart => {
|
flycheck::Progress::DidStart => {
|
||||||
self.diagnostics.clear_check(id);
|
self.diagnostics_received = false;
|
||||||
(Progress::Begin, None)
|
(Progress::Begin, None)
|
||||||
}
|
}
|
||||||
flycheck::Progress::DidCheckCrate(target) => (Progress::Report, Some(target)),
|
flycheck::Progress::DidCheckCrate(target) => (Progress::Report, Some(target)),
|
||||||
|
@ -848,6 +852,9 @@ impl GlobalState {
|
||||||
flycheck::Progress::DidFinish(result) => {
|
flycheck::Progress::DidFinish(result) => {
|
||||||
self.last_flycheck_error =
|
self.last_flycheck_error =
|
||||||
result.err().map(|err| format!("cargo check failed to start: {err}"));
|
result.err().map(|err| format!("cargo check failed to start: {err}"));
|
||||||
|
if !self.diagnostics_received {
|
||||||
|
self.diagnostics.clear_check(id);
|
||||||
|
}
|
||||||
(Progress::End, None)
|
(Progress::End, None)
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue