on master help sign in
Prevent LSP Messages from displaying when a prompt is presented (#824)
4d07eaaLeoi Hung Kin
helix-term/src/application.rs+24−9
@@ -295,14 +295,6 @@ impl Application {
295 server_id: usize,
295 server_id: usize,
296 ) {
296 ) {
297 use helix_lsp::{Call, MethodCall, Notification};
297 use helix_lsp::{Call, MethodCall, Notification};
298− let editor_view = self
299− .compositor
300− .find(std::any::type_name::<ui::EditorView>())
301− .expect("expected at least one EditorView");
302− let editor_view = editor_view
303− .as_any_mut()
304− .downcast_mut::<ui::EditorView>()
305− .unwrap();
306
298
307 match call {
299 match call {
308 Call::Notification(helix_lsp::jsonrpc::Notification { method, params, .. }) => {
300 Call::Notification(helix_lsp::jsonrpc::Notification { method, params, .. }) => {
@@ -412,7 +404,19 @@ impl Application {
412 Notification::LogMessage(params) => {
404 Notification::LogMessage(params) => {
413 log::info!("window/logMessage: {:?}", params);
405 log::info!("window/logMessage: {:?}", params);
414 }
406 }
415− Notification::ProgressMessage(params) => {
407+ Notification::ProgressMessage(params)
408+ if !self
409+ .compositor
410+ .has_component(std::any::type_name::<ui::Prompt>()) =>
411+ {
412+ let editor_view = self
413+ .compositor
414+ .find(std::any::type_name::<ui::EditorView>())
415+ .expect("expected at least one EditorView");
416+ let editor_view = editor_view
417+ .as_any_mut()
418+ .downcast_mut::<ui::EditorView>()
419+ .unwrap();
416 let lsp::ProgressParams { token, value } = params;
420 let lsp::ProgressParams { token, value } = params;
417
421
418 let lsp::ProgressParamsValue::WorkDone(work) = value;
422 let lsp::ProgressParamsValue::WorkDone(work) = value;
@@ -487,6 +491,9 @@ impl Application {
487 self.editor.set_status(status);
491 self.editor.set_status(status);
488 }
492 }
489 }
493 }
494+ Notification::ProgressMessage(_params) => {
495+ // do nothing
496+ }
490 }
497 }
491 }
498 }
492 Call::MethodCall(helix_lsp::jsonrpc::MethodCall {
499 Call::MethodCall(helix_lsp::jsonrpc::MethodCall {
@@ -521,6 +528,14 @@ impl Application {
521 MethodCall::WorkDoneProgressCreate(params) => {
528 MethodCall::WorkDoneProgressCreate(params) => {
522 self.lsp_progress.create(server_id, params.token);
529 self.lsp_progress.create(server_id, params.token);
523
530
531+ let editor_view = self
532+ .compositor
533+ .find(std::any::type_name::<ui::EditorView>())
534+ .expect("expected at least one EditorView");
535+ let editor_view = editor_view
536+ .as_any_mut()
537+ .downcast_mut::<ui::EditorView>()
538+ .unwrap();
524 let spinner = editor_view.spinners_mut().get_or_create(server_id);
539 let spinner = editor_view.spinners_mut().get_or_create(server_id);
525 if spinner.is_stopped() {
540 if spinner.is_stopped() {
526 spinner.start();
541 spinner.start();
helix-term/src/compositor.rs+6
@@ -171,6 +171,12 @@ impl Compositor {
171 (None, CursorKind::Hidden)
171 (None, CursorKind::Hidden)
172 }
172 }
173
173
174+ pub fn has_component(&self, type_name: &str) -> bool {
175+ self.layers
176+ .iter()
177+ .any(|component| component.type_name() == type_name)
178+ }
179+
174 pub fn find(&mut self, type_name: &str) -> Option<&mut dyn Component> {
180 pub fn find(&mut self, type_name: &str) -> Option<&mut dyn Component> {
175 self.layers
181 self.layers
176 .iter_mut()
182 .iter_mut()