Auto merge of #17248 - mladedav:dm/delay-clear, r=Veykril · rust-lang/rust@39e6032 (original) (raw)

2 files changed

lines changed

Original file line number Diff line number Diff line change
@@ -87,6 +87,7 @@ pub(crate) struct GlobalState {
87 87 pub(crate) flycheck_sender: Senderflycheck::Message\,
88 88 pub(crate) flycheck_receiver: Receiverflycheck::Message\,
89 89 pub(crate) last_flycheck_error: Option<String>,
90 +pub(crate) diagnostics_received: bool,
90 91
91 92 // Test explorer
92 93 pub(crate) test_run_session: Option<Vecflycheck::CargoTestHandle\>,
@@ -224,6 +225,7 @@ impl GlobalState {
224 225 flycheck_sender,
225 226 flycheck_receiver,
226 227 last_flycheck_error: None,
228 +diagnostics_received: false,
227 229
228 230 test_run_session: None,
229 231 test_run_sender,
Original file line number Diff line number Diff line change
@@ -804,6 +804,10 @@ impl GlobalState {
804 804 fn handle_flycheck_msg(&mut self, message: flycheck::Message) {
805 805 match message {
806 806 flycheck::Message::AddDiagnostic { id, workspace_root, diagnostic } => {
807 +if !self.diagnostics_received {
808 +self.diagnostics.clear_check(id);
809 +self.diagnostics_received = true;
810 +}
807 811 let snap = self.snapshot();
808 812 let diagnostics = crate::diagnostics::to_proto::map_rust_diagnostic_to_lsp(
809 813 &self.config.diagnostics_map(),
@@ -832,7 +836,7 @@ impl GlobalState {
832 836 flycheck::Message::Progress { id, progress } => {
833 837 let (state, message) = match progress {
834 838 flycheck::Progress::DidStart => {
835 -self.diagnostics.clear_check(id);
839 +self.diagnostics_received = false;
836 840 (Progress::Begin, None)
837 841 }
838 842 flycheck::Progress::DidCheckCrate(target) => (Progress::Report, Some(target)),
@@ -848,6 +852,9 @@ impl GlobalState {
848 852 flycheck::Progress::DidFinish(result) => {
849 853 self.last_flycheck_error =
850 854 result.err().map(|err
855 +if !self.diagnostics_received {
856 +self.diagnostics.clear_check(id);
857 +}
851 858 (Progress::End, None)
852 859 }
853 860 };