diff --git a/crates/rust-analyzer/src/lsp_utils.rs b/crates/rust-analyzer/src/lsp_utils.rs index 85c6615714..bd888f6347 100644 --- a/crates/rust-analyzer/src/lsp_utils.rs +++ b/crates/rust-analyzer/src/lsp_utils.rs @@ -25,8 +25,9 @@ pub(crate) enum Progress { } impl Progress { - pub(crate) fn percentage(done: usize, total: usize) -> f64 { - (done as f64 / total.max(1) as f64) * 100.0 + pub(crate) fn fraction(done: usize, total: usize) -> f64 { + assert!(done <= total); + done as f64 / total.max(1) as f64 } } @@ -43,11 +44,15 @@ impl GlobalState { title: &str, state: Progress, message: Option, - percentage: Option, + fraction: Option, ) { if !self.config.client_caps.work_done_progress { return; } + let percentage = fraction.map(|f| { + assert!(0.0 <= f && f <= 1.0); + f * 100.0 + }); let token = lsp_types::ProgressToken::String(format!("rustAnalyzer/{}", title)); let work_done_progress = match state { Progress::Begin => { diff --git a/crates/rust-analyzer/src/main_loop.rs b/crates/rust-analyzer/src/main_loop.rs index c2d0ac791b..4b7ac8224e 100644 --- a/crates/rust-analyzer/src/main_loop.rs +++ b/crates/rust-analyzer/src/main_loop.rs @@ -230,7 +230,7 @@ impl GlobalState { "roots scanned", state, Some(format!("{}/{}", n_done, n_total)), - Some(Progress::percentage(n_done, n_total)), + Some(Progress::fraction(n_done, n_total)), ) } }