@@ -714,45 +714,48 @@ fn send_startup_progress(
714714 world_state : & WorldState ,
715715) {
716716 let total: usize = world_state. workspaces . iter ( ) . map ( |it| it. n_packages ( ) ) . sum ( ) ;
717+ let prev_progress = loop_state. roots_scanned_progress ;
717718 let progress = total - world_state. roots_to_scan ;
718- if loop_state . roots_scanned_progress == Some ( progress) {
719+ if prev_progress == Some ( progress) {
719720 return ;
720721 }
721722 loop_state. roots_scanned_progress = Some ( progress) ;
722723
723- match progress {
724- 0 => {
725- let work_done_progress_create = request_new :: < req:: WorkDoneProgressCreate > (
726- loop_state. next_request_id ( ) ,
727- WorkDoneProgressCreateParams {
728- token : req:: ProgressToken :: String ( "rustAnalyzer/startup" . into ( ) ) ,
729- } ,
730- ) ;
731- sender. send ( work_done_progress_create. into ( ) ) . unwrap ( ) ;
732- send_startup_progress_notif (
733- sender,
734- WorkDoneProgress :: Begin ( WorkDoneProgressBegin {
735- title : "rust-analyzer" . into ( ) ,
736- cancellable : None ,
737- message : Some ( format ! ( "{}/{} packages" , progress, total) ) ,
738- percentage : Some ( 100.0 * progress as f64 / total as f64 ) ,
739- } ) ,
740- ) ;
741- }
742- progress if progress == total => send_startup_progress_notif (
724+ if prev_progress. is_none ( ) {
725+ let work_done_progress_create = request_new :: < req:: WorkDoneProgressCreate > (
726+ loop_state. next_request_id ( ) ,
727+ WorkDoneProgressCreateParams {
728+ token : req:: ProgressToken :: String ( "rustAnalyzer/startup" . into ( ) ) ,
729+ } ,
730+ ) ;
731+ sender. send ( work_done_progress_create. into ( ) ) . unwrap ( ) ;
732+ send_startup_progress_notif (
743733 sender,
744- WorkDoneProgress :: End ( WorkDoneProgressEnd {
745- message : Some ( format ! ( "rust-analyzer loaded, {} packages" , progress) ) ,
734+ WorkDoneProgress :: Begin ( WorkDoneProgressBegin {
735+ title : "rust-analyzer" . into ( ) ,
736+ cancellable : None ,
737+ message : Some ( format ! ( "{}/{} packages" , progress, total) ) ,
738+ percentage : Some ( 100.0 * progress as f64 / total as f64 ) ,
746739 } ) ,
747- ) ,
748- progress => send_startup_progress_notif (
740+ ) ;
741+ } else if progress < total {
742+ send_startup_progress_notif (
749743 sender,
750744 WorkDoneProgress :: Report ( WorkDoneProgressReport {
751745 cancellable : None ,
752746 message : Some ( format ! ( "{}/{} packages" , progress, total) ) ,
753747 percentage : Some ( 100.0 * progress as f64 / total as f64 ) ,
754748 } ) ,
755- ) ,
749+ )
750+ }
751+
752+ if progress == total {
753+ send_startup_progress_notif (
754+ sender,
755+ WorkDoneProgress :: End ( WorkDoneProgressEnd {
756+ message : Some ( format ! ( "rust-analyzer loaded, {} packages" , progress) ) ,
757+ } ) ,
758+ )
756759 }
757760}
758761
0 commit comments