@@ -1,3 +1,4 @@
1use helix_view::{document::Mode, Document, Editor, Theme, View};
2use helix_view::{document::Mode, Document, Editor, Theme, View};
3use crate::{args::Args, compositor::Compositor, ui};
4use crate::{args::Args, compositor::Compositor, ui};
@@ -228,6 +229,59 @@ impl Application {
228 Notification::LogMessage(params) => {
229 Notification::LogMessage(params) => {
229 log::warn!("unhandled window/logMessage: {:?}", params);
230 log::warn!("unhandled window/logMessage: {:?}", params);
232+ Notification::ProgressMessage(params) => {
233+ let token = match params.token {
234+ lsp::NumberOrString::Number(n) => n.to_string(),
235+ lsp::NumberOrString::String(s) => s,
238+ let lsp::ProgressParamsValue::WorkDone(work) = params.value;
239+ let parts = match work {
240+ lsp::WorkDoneProgress::Begin(lsp::WorkDoneProgressBegin {
245+ }) => (Some(title), message, percentage.map(|n| n.to_string())),
246+ lsp::WorkDoneProgress::Report(lsp::WorkDoneProgressReport {
250+ }) => (None, message, percentage.map(|n| n.to_string())),
251+ lsp::WorkDoneProgress::End(lsp::WorkDoneProgressEnd {
254+ if let Some(message) = message {
255+ (None, Some(message), None)
257+ self.editor.clear_status();
263+ (Some(title), Some(message), Some(percentage)) => {
264+ format!("{}% {} - {}", percentage, title, message)
266+ (Some(title), None, Some(percentage)) => {
267+ format!("{}% {}", percentage, title)
269+ (Some(title), Some(message), None) => {
270+ format!("{} - {}", title, message)
272+ (None, Some(message), Some(percentage)) => {
273+ format!("{}% {}", percentage, message)
275+ (Some(title), None, None) => title,
276+ (None, Some(message), None) => message,
277+ (None, None, Some(percentage)) => format!("{}%", percentage),
278+ (None, None, None) => "".into(),
281+ let status = format!("[{}] {}", token, msg);
282+ self.editor.set_status(status);
231 _ => unreachable!(),
285 _ => unreachable!(),