From 70ccda39414afa5bd5a92d3edec005e7830c6420 Mon Sep 17 00:00:00 2001 From: Steffen Lyngbaek Date: Sun, 15 Mar 2020 21:44:27 -0700 Subject: Fix broken tests - Handle case of no projects. The notification still needs to be posted --- crates/rust-analyzer/src/main_loop.rs | 55 ++++++++++++++++++----------------- 1 file changed, 29 insertions(+), 26 deletions(-) (limited to 'crates') 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( world_state: &WorldState, ) { let total: usize = world_state.workspaces.iter().map(|it| it.n_packages()).sum(); + let prev_progress = loop_state.roots_scanned_progress; let progress = total - world_state.roots_to_scan; - if loop_state.roots_scanned_progress == Some(progress) { + if prev_progress == Some(progress) { return; } loop_state.roots_scanned_progress = Some(progress); - match progress { - 0 => { - let work_done_progress_create = request_new::( - loop_state.next_request_id(), - WorkDoneProgressCreateParams { - token: req::ProgressToken::String("rustAnalyzer/startup".into()), - }, - ); - sender.send(work_done_progress_create.into()).unwrap(); - send_startup_progress_notif( - sender, - WorkDoneProgress::Begin(WorkDoneProgressBegin { - title: "rust-analyzer".into(), - cancellable: None, - message: Some(format!("{}/{} packages", progress, total)), - percentage: Some(100.0 * progress as f64 / total as f64), - }), - ); - } - progress if progress == total => send_startup_progress_notif( + if prev_progress.is_none() { + let work_done_progress_create = request_new::( + loop_state.next_request_id(), + WorkDoneProgressCreateParams { + token: req::ProgressToken::String("rustAnalyzer/startup".into()), + }, + ); + sender.send(work_done_progress_create.into()).unwrap(); + send_startup_progress_notif( sender, - WorkDoneProgress::End(WorkDoneProgressEnd { - message: Some(format!("rust-analyzer loaded, {} packages", progress)), + WorkDoneProgress::Begin(WorkDoneProgressBegin { + title: "rust-analyzer".into(), + cancellable: None, + message: Some(format!("{}/{} packages", progress, total)), + percentage: Some(100.0 * progress as f64 / total as f64), }), - ), - progress => send_startup_progress_notif( + ); + } else if progress < total { + send_startup_progress_notif( sender, WorkDoneProgress::Report(WorkDoneProgressReport { cancellable: None, message: Some(format!("{}/{} packages", progress, total)), percentage: Some(100.0 * progress as f64 / total as f64), }), - ), + ) + } + + if progress == total { + send_startup_progress_notif( + sender, + WorkDoneProgress::End(WorkDoneProgressEnd { + message: Some(format!("rust-analyzer loaded, {} packages", progress)), + }), + ) } } -- cgit v1.2.3