aboutsummaryrefslogtreecommitdiff
path: root/crates
diff options
context:
space:
mode:
authorSteffen Lyngbaek <[email protected]>2020-03-16 04:44:27 +0000
committerSteffen Lyngbaek <[email protected]>2020-03-16 04:44:27 +0000
commit70ccda39414afa5bd5a92d3edec005e7830c6420 (patch)
tree49fc18101ee16fe7e4ec7e5c5edb6a7b0aa75d8b /crates
parente3db4f3716cb67f75d818207b7698cf3464aad57 (diff)
Fix broken tests
- Handle case of no projects. The notification still needs to be posted
Diffstat (limited to 'crates')
-rw-r--r--crates/rust-analyzer/src/main_loop.rs55
1 files changed, 29 insertions, 26 deletions
diff --git a/crates/rust-analyzer/src/main_loop.rs b/crates/rust-analyzer/src/main_loop.rs
index 7e00d58ec..917dfad78 100644
--- a/crates/rust-analyzer/src/main_loop.rs
+++ b/crates/rust-analyzer/src/main_loop.rs
@@ -714,45 +714,48 @@ fn send_startup_progress(
714 world_state: &WorldState, 714 world_state: &WorldState,
715) { 715) {
716 let total: usize = world_state.workspaces.iter().map(|it| it.n_packages()).sum(); 716 let total: usize = world_state.workspaces.iter().map(|it| it.n_packages()).sum();
717 let prev_progress = loop_state.roots_scanned_progress;
717 let progress = total - world_state.roots_to_scan; 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 return; 720 return;
720 } 721 }
721 loop_state.roots_scanned_progress = Some(progress); 722 loop_state.roots_scanned_progress = Some(progress);
722 723
723 match progress { 724 if prev_progress.is_none() {
724 0 => { 725 let work_done_progress_create = request_new::<req::WorkDoneProgressCreate>(
725 let work_done_progress_create = request_new::<req::WorkDoneProgressCreate>( 726 loop_state.next_request_id(),
726 loop_state.next_request_id(), 727 WorkDoneProgressCreateParams {
727 WorkDoneProgressCreateParams { 728 token: req::ProgressToken::String("rustAnalyzer/startup".into()),
728 token: req::ProgressToken::String("rustAnalyzer/startup".into()), 729 },
729 }, 730 );
730 ); 731 sender.send(work_done_progress_create.into()).unwrap();
731 sender.send(work_done_progress_create.into()).unwrap(); 732 send_startup_progress_notif(
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(
743 sender, 733 sender,
744 WorkDoneProgress::End(WorkDoneProgressEnd { 734 WorkDoneProgress::Begin(WorkDoneProgressBegin {
745 message: Some(format!("rust-analyzer loaded, {} packages", progress)), 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 ), 740 );
748 progress => send_startup_progress_notif( 741 } else if progress < total {
742 send_startup_progress_notif(
749 sender, 743 sender,
750 WorkDoneProgress::Report(WorkDoneProgressReport { 744 WorkDoneProgress::Report(WorkDoneProgressReport {
751 cancellable: None, 745 cancellable: None,
752 message: Some(format!("{}/{} packages", progress, total)), 746 message: Some(format!("{}/{} packages", progress, total)),
753 percentage: Some(100.0 * progress as f64 / total as f64), 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