@@ -714,45 +714,48 @@ fn send_startup_progress(
714
714
world_state : & WorldState ,
715
715
) {
716
716
let total: usize = world_state. workspaces . iter ( ) . map ( |it| it. n_packages ( ) ) . sum ( ) ;
717
+ let prev_progress = loop_state. roots_scanned_progress ;
717
718
let progress = total - world_state. roots_to_scan ;
718
- if loop_state . roots_scanned_progress == Some ( progress) {
719
+ if prev_progress == Some ( progress) {
719
720
return ;
720
721
}
721
722
loop_state. roots_scanned_progress = Some ( progress) ;
722
723
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 (
743
733
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 ) ,
746
739
} ) ,
747
- ) ,
748
- progress => send_startup_progress_notif (
740
+ ) ;
741
+ } else if progress < total {
742
+ send_startup_progress_notif (
749
743
sender,
750
744
WorkDoneProgress :: Report ( WorkDoneProgressReport {
751
745
cancellable : None ,
752
746
message : Some ( format ! ( "{}/{} packages" , progress, total) ) ,
753
747
percentage : Some ( 100.0 * progress as f64 / total as f64 ) ,
754
748
} ) ,
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
+ )
756
759
}
757
760
}
758
761
0 commit comments