Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'helix-term/src/application.rs')
| -rw-r--r-- | helix-term/src/application.rs | 79 |
1 files changed, 38 insertions, 41 deletions
diff --git a/helix-term/src/application.rs b/helix-term/src/application.rs index 3bc32439..16a26cb2 100644 --- a/helix-term/src/application.rs +++ b/helix-term/src/application.rs @@ -756,10 +756,11 @@ impl Application { .compositor .find::<ui::EditorView>() .expect("expected at least one EditorView"); - let lsp::ProgressParams { token, value } = params; - - let lsp::ProgressParamsValue::WorkDone(work) = value; - let parts = match &work { + let lsp::ProgressParams { + token, + value: lsp::ProgressParamsValue::WorkDone(work), + } = params; + let (title, message, percentage) = match &work { lsp::WorkDoneProgress::Begin(lsp::WorkDoneProgressBegin { title, message, @@ -787,47 +788,43 @@ impl Application { } }; - let token_d: &dyn std::fmt::Display = match &token { - lsp::NumberOrString::Number(n) => n, - lsp::NumberOrString::String(s) => s, - }; - - let status = match parts { - (Some(title), Some(message), Some(percentage)) => { - format!("[{}] {}% {} - {}", token_d, percentage, title, message) - } - (Some(title), None, Some(percentage)) => { - format!("[{}] {}% {}", token_d, percentage, title) - } - (Some(title), Some(message), None) => { - format!("[{}] {} - {}", token_d, title, message) - } - (None, Some(message), Some(percentage)) => { - format!("[{}] {}% {}", token_d, percentage, message) - } - (Some(title), None, None) => { - format!("[{}] {}", token_d, title) + if self.editor.config().lsp.display_progress_messages { + let title = + title.or_else(|| self.lsp_progress.title(server_id, &token)); + if title.is_some() || percentage.is_some() || message.is_some() { + use std::fmt::Write as _; + let mut status = format!("{}: ", language_server!().name()); + if let Some(percentage) = percentage { + write!(status, "{percentage:>2}% ").unwrap(); + } + if let Some(title) = title { + status.push_str(title); + } + if title.is_some() && message.is_some() { + status.push_str(" ⋅ "); + } + if let Some(message) = message { + status.push_str(message); + } + self.editor.set_status(status); } - (None, Some(message), None) => { - format!("[{}] {}", token_d, message) + } + + match work { + lsp::WorkDoneProgress::Begin(begin_status) => { + self.lsp_progress + .begin(server_id, token.clone(), begin_status); } - (None, None, Some(percentage)) => { - format!("[{}] {}%", token_d, percentage) + lsp::WorkDoneProgress::Report(report_status) => { + self.lsp_progress + .update(server_id, token.clone(), report_status); } - (None, None, None) => format!("[{}]", token_d), - }; - - if let lsp::WorkDoneProgress::End(_) = work { - self.lsp_progress.end_progress(server_id, &token); - if !self.lsp_progress.is_progressing(server_id) { - editor_view.spinners_mut().get_or_create(server_id).stop(); + lsp::WorkDoneProgress::End(_) => { + self.lsp_progress.end_progress(server_id, &token); + if !self.lsp_progress.is_progressing(server_id) { + editor_view.spinners_mut().get_or_create(server_id).stop(); + }; } - } else { - self.lsp_progress.update(server_id, token, work); - } - - if self.config.load().editor.lsp.display_progress_messages { - self.editor.set_status(status); } } Notification::ProgressMessage(_params) => { |