From aaa145067833c41686b7cdde9fb999018735bc04 Mon Sep 17 00:00:00 2001 From: Skyler Hawthorne Date: Mon, 11 Jul 2022 23:38:26 -0400 Subject: fix write-quit with auto format write-quit will now save all files successfully even when there is auto formatting --- helix-term/src/ui/editor.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'helix-term/src/ui/editor.rs') diff --git a/helix-term/src/ui/editor.rs b/helix-term/src/ui/editor.rs index 3cd2130a..abed7f9b 100644 --- a/helix-term/src/ui/editor.rs +++ b/helix-term/src/ui/editor.rs @@ -1,7 +1,8 @@ use crate::{ commands, compositor::{Component, Context, Event, EventResult}, - job, key, + job::{self, Callback}, + key, keymap::{KeymapResult, Keymaps}, ui::{Completion, ProgressSpinners}, }; @@ -944,9 +945,9 @@ impl EditorView { // TODO: Use an on_mode_change hook to remove signature help cxt.jobs.callback(async { - let call: job::Callback = Box::new(|_editor, compositor| { + let call: job::Callback = Callback::Compositor(Box::new(|compositor| { compositor.remove(SignatureHelp::ID); - }); + })); Ok(call) }); } -- cgit v1.2.3-70-g09d2 From b530a86d1f15cc7df0e1ae8aa4bd02109ac33a8f Mon Sep 17 00:00:00 2001 From: Skyler Hawthorne Date: Fri, 2 Sep 2022 23:38:38 -0400 Subject: remove Callback::Compositor variant To reduce likelihood of accidental discarding of important callbacks --- helix-term/src/application.rs | 2 +- helix-term/src/commands/dap.rs | 18 ++++++++++-------- helix-term/src/compositor.rs | 4 +--- helix-term/src/job.rs | 20 ++++---------------- helix-term/src/ui/editor.rs | 7 ++++--- 5 files changed, 20 insertions(+), 31 deletions(-) (limited to 'helix-term/src/ui/editor.rs') diff --git a/helix-term/src/application.rs b/helix-term/src/application.rs index 60610c1d..fe53d73d 100644 --- a/helix-term/src/application.rs +++ b/helix-term/src/application.rs @@ -991,7 +991,7 @@ impl Application { let mut result = match self .jobs - .finish(Some(&mut self.editor), Some(&mut self.compositor)) + .finish(&mut self.editor, Some(&mut self.compositor)) .await { Ok(_) => Ok(()), diff --git a/helix-term/src/commands/dap.rs b/helix-term/src/commands/dap.rs index 9c067eba..c27417e3 100644 --- a/helix-term/src/commands/dap.rs +++ b/helix-term/src/commands/dap.rs @@ -277,10 +277,11 @@ pub fn dap_launch(cx: &mut Context) { let completions = template.completion.clone(); let name = template.name.clone(); let callback = Box::pin(async move { - let call: Callback = Callback::Compositor(Box::new(move |compositor| { - let prompt = debug_parameter_prompt(completions, name, Vec::new()); - compositor.push(Box::new(prompt)); - })); + let call: Callback = + Callback::EditorCompositor(Box::new(move |_editor, compositor| { + let prompt = debug_parameter_prompt(completions, name, Vec::new()); + compositor.push(Box::new(prompt)); + })); Ok(call) }); cx.jobs.callback(callback); @@ -335,10 +336,11 @@ fn debug_parameter_prompt( let config_name = config_name.clone(); let params = params.clone(); let callback = Box::pin(async move { - let call: Callback = Callback::Compositor(Box::new(move |compositor| { - let prompt = debug_parameter_prompt(completions, config_name, params); - compositor.push(Box::new(prompt)); - })); + let call: Callback = + Callback::EditorCompositor(Box::new(move |_editor, compositor| { + let prompt = debug_parameter_prompt(completions, config_name, params); + compositor.push(Box::new(prompt)); + })); Ok(call) }); cx.jobs.callback(callback); diff --git a/helix-term/src/compositor.rs b/helix-term/src/compositor.rs index 5077807d..35b9d054 100644 --- a/helix-term/src/compositor.rs +++ b/helix-term/src/compositor.rs @@ -31,9 +31,7 @@ impl<'a> Context<'a> { /// Waits on all pending jobs, and then tries to flush all pending write /// operations for all documents. pub fn block_try_flush_writes(&mut self) -> anyhow::Result<()> { - tokio::task::block_in_place(|| { - helix_lsp::block_on(self.jobs.finish(Some(self.editor), None)) - })?; + tokio::task::block_in_place(|| helix_lsp::block_on(self.jobs.finish(self.editor, None)))?; for doc in &mut self.editor.documents.values_mut() { tokio::task::block_in_place(|| helix_lsp::block_on(doc.try_flush_saves())) diff --git a/helix-term/src/job.rs b/helix-term/src/job.rs index 3c9e4511..2888b6eb 100644 --- a/helix-term/src/job.rs +++ b/helix-term/src/job.rs @@ -8,7 +8,6 @@ use futures_util::stream::{FuturesUnordered, StreamExt}; pub enum Callback { EditorCompositor(Box), Editor(Box), - Compositor(Box), } pub type JobFuture = BoxFuture<'static, anyhow::Result>>; @@ -76,7 +75,6 @@ impl Jobs { Ok(Some(call)) => match call { Callback::EditorCompositor(call) => call(editor, compositor), Callback::Editor(call) => call(editor), - Callback::Compositor(call) => call(compositor), }, Err(e) => { editor.set_error(format!("Async job failed: {}", e)); @@ -102,7 +100,7 @@ impl Jobs { /// Blocks until all the jobs that need to be waited on are done. pub async fn finish( &mut self, - mut editor: Option<&mut Editor>, + editor: &mut Editor, mut compositor: Option<&mut Compositor>, ) -> anyhow::Result<()> { log::debug!("waiting on jobs..."); @@ -117,20 +115,10 @@ impl Jobs { // clippy doesn't realize this is an error without the derefs #[allow(clippy::needless_option_as_deref)] match callback { - Callback::EditorCompositor(call) - if editor.is_some() && compositor.is_some() => - { - call( - editor.as_deref_mut().unwrap(), - compositor.as_deref_mut().unwrap(), - ) - } - Callback::Editor(call) if editor.is_some() => { - call(editor.as_deref_mut().unwrap()) - } - Callback::Compositor(call) if compositor.is_some() => { - call(compositor.as_deref_mut().unwrap()) + Callback::EditorCompositor(call) if compositor.is_some() => { + call(editor, compositor.as_deref_mut().unwrap()) } + Callback::Editor(call) => call(editor), // skip callbacks for which we don't have the necessary references _ => (), diff --git a/helix-term/src/ui/editor.rs b/helix-term/src/ui/editor.rs index abed7f9b..73dfd52c 100644 --- a/helix-term/src/ui/editor.rs +++ b/helix-term/src/ui/editor.rs @@ -945,9 +945,10 @@ impl EditorView { // TODO: Use an on_mode_change hook to remove signature help cxt.jobs.callback(async { - let call: job::Callback = Callback::Compositor(Box::new(|compositor| { - compositor.remove(SignatureHelp::ID); - })); + let call: job::Callback = + Callback::EditorCompositor(Box::new(|_editor, compositor| { + compositor.remove(SignatureHelp::ID); + })); Ok(call) }); } -- cgit v1.2.3-70-g09d2