@@ -426,12 +426,6 @@ fn loop_turn(
426426 } ) ;
427427 }
428428
429- if !loop_state. workspace_loaded
430- && world_state. feature_flags . get ( "notifications.workspace-loaded" )
431- {
432- send_startup_progress ( & connection. sender , loop_state, world_state) ;
433- }
434-
435429 if !loop_state. workspace_loaded
436430 && world_state. roots_to_scan == 0
437431 && loop_state. pending_libraries . is_empty ( )
@@ -444,6 +438,9 @@ fn loop_turn(
444438 let snap = world_state. snapshot ( ) ;
445439 move || snap. analysis ( ) . prime_caches ( subs) . unwrap_or_else ( |_: Canceled | ( ) )
446440 } ) ;
441+ send_startup_progress ( & connection. sender , loop_state, world_state) ;
442+ } else if !loop_state. workspace_loaded {
443+ send_startup_progress ( & connection. sender , loop_state, world_state) ;
447444 }
448445
449446 if state_changed {
@@ -713,49 +710,49 @@ fn send_startup_progress(
713710 loop_state : & mut LoopState ,
714711 world_state : & WorldState ,
715712) {
713+ if !world_state. feature_flags . get ( "notifications.workspace-loaded" ) {
714+ return ;
715+ }
716+
716717 let total: usize = world_state. workspaces . iter ( ) . map ( |it| it. n_packages ( ) ) . sum ( ) ;
717718 let prev_progress = loop_state. roots_scanned_progress ;
718719 let progress = total - world_state. roots_to_scan ;
719- if prev_progress == Some ( progress) {
720- return ;
721- }
722720 loop_state. roots_scanned_progress = Some ( progress) ;
723721
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 (
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- } else if progress < total {
742- send_startup_progress_notif (
722+ match ( prev_progress, loop_state. workspace_loaded ) {
723+ ( None , false ) => {
724+ let work_done_progress_create = request_new :: < req:: WorkDoneProgressCreate > (
725+ loop_state. next_request_id ( ) ,
726+ WorkDoneProgressCreateParams {
727+ token : req:: ProgressToken :: String ( "rustAnalyzer/startup" . into ( ) ) ,
728+ } ,
729+ ) ;
730+ sender. send ( work_done_progress_create. into ( ) ) . unwrap ( ) ;
731+ send_startup_progress_notif (
732+ sender,
733+ WorkDoneProgress :: Begin ( WorkDoneProgressBegin {
734+ title : "rust-analyzer" . into ( ) ,
735+ cancellable : None ,
736+ message : Some ( format ! ( "{}/{} packages" , progress, total) ) ,
737+ percentage : Some ( 100.0 * progress as f64 / total as f64 ) ,
738+ } ) ,
739+ ) ;
740+ }
741+ ( Some ( prev) , false ) if progress != prev => send_startup_progress_notif (
743742 sender,
744743 WorkDoneProgress :: Report ( WorkDoneProgressReport {
745744 cancellable : None ,
746745 message : Some ( format ! ( "{}/{} packages" , progress, total) ) ,
747746 percentage : Some ( 100.0 * progress as f64 / total as f64 ) ,
748747 } ) ,
749- )
750- }
751-
752- if progress == total {
753- send_startup_progress_notif (
748+ ) ,
749+ ( _, true ) => send_startup_progress_notif (
754750 sender,
755751 WorkDoneProgress :: End ( WorkDoneProgressEnd {
756752 message : Some ( format ! ( "rust-analyzer loaded, {} packages" , progress) ) ,
757753 } ) ,
758- )
754+ ) ,
755+ _ => { }
759756 }
760757}
761758
0 commit comments