@@ -437,11 +437,17 @@ impl GlobalState {
437437 }
438438 }
439439 Event :: Flycheck ( message) => {
440- let _p = tracing :: info_span! ( "GlobalState::handle_event/flycheck" ) . entered ( ) ;
441- self . handle_flycheck_msg ( message) ;
440+ let mut cargo_finished = false ;
441+ self . handle_flycheck_msg ( message, & mut cargo_finished ) ;
442442 // Coalesce many flycheck updates into a single loop turn
443443 while let Ok ( message) = self . flycheck_receiver . try_recv ( ) {
444- self . handle_flycheck_msg ( message) ;
444+ self . handle_flycheck_msg ( message, & mut cargo_finished) ;
445+ }
446+ if cargo_finished {
447+ self . send_request :: < lsp_types:: request:: WorkspaceDiagnosticRefresh > (
448+ ( ) ,
449+ |_, _| ( ) ,
450+ ) ;
445451 }
446452 }
447453 Event :: TestResult ( message) => {
@@ -1109,7 +1115,7 @@ impl GlobalState {
11091115 }
11101116 }
11111117
1112- fn handle_flycheck_msg ( & mut self , message : FlycheckMessage ) {
1118+ fn handle_flycheck_msg ( & mut self , message : FlycheckMessage , cargo_finished : & mut bool ) {
11131119 match message {
11141120 FlycheckMessage :: AddDiagnostic {
11151121 id,
@@ -1167,6 +1173,7 @@ impl GlobalState {
11671173 flycheck:: Progress :: DidCheckCrate ( target) => ( Progress :: Report , Some ( target) ) ,
11681174 flycheck:: Progress :: DidCancel => {
11691175 self . last_flycheck_error = None ;
1176+ * cargo_finished = true ;
11701177 ( Progress :: End , None )
11711178 }
11721179 flycheck:: Progress :: DidFailToRestart ( err) => {
@@ -1177,6 +1184,7 @@ impl GlobalState {
11771184 flycheck:: Progress :: DidFinish ( result) => {
11781185 self . last_flycheck_error =
11791186 result. err ( ) . map ( |err| format ! ( "cargo check failed to start: {err}" ) ) ;
1187+ * cargo_finished = true ;
11801188 ( Progress :: End , None )
11811189 }
11821190 } ;
0 commit comments