From 6219142c96708d8068bcf9eb2a6424882d74094c Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Wed, 7 Oct 2020 12:15:37 +0200 Subject: Better progress API Percentage is a UI concern, the physical fact here is fraction. It's sad that percentage bleeds into the protocol level, we even duplicated this bad API ourselves! --- crates/rust-analyzer/src/lsp_utils.rs | 11 ++++++++--- crates/rust-analyzer/src/main_loop.rs | 2 +- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/crates/rust-analyzer/src/lsp_utils.rs b/crates/rust-analyzer/src/lsp_utils.rs index 85c661571..bd888f634 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 c2d0ac791..4b7ac8224 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)), ) } } -- cgit v1.2.3