on master help sign in
move language server refresh to document saved event handler
b3fc31aSkyler Hawthorne
helix-term/src/application.rs+27−15
@@ -462,22 +462,34 @@ impl Application {
462 let lines = doc_save_event.text.len_lines();
462 let lines = doc_save_event.text.len_lines();
463 let bytes = doc_save_event.text.len_bytes();
463 let bytes = doc_save_event.text.len_bytes();
464
464
465+ if doc.path() != Some(&doc_save_event.path) {
465− if let Err(err) = doc.set_path(Some(&doc_save_event.path)) {
466+ if let Err(err) = doc.set_path(Some(&doc_save_event.path)) {
466− log::error!(
467+ log::error!(
467− "error setting path for doc '{:?}': {}",
468+ "error setting path for doc '{:?}': {}",
468− doc.path(),
469+ doc.path(),
469− err.to_string(),
470+ err.to_string(),
470− );
471+ );
472+
471− self.editor.set_error(err.to_string());
473+ self.editor.set_error(err.to_string());
472− } else {
474+ return;
473− // TODO: fix being overwritten by lsp
475+ }
474− self.editor.set_status(format!(
476+
475− "'{}' written, {}L {}B",
477+ let loader = self.editor.syn_loader.clone();
476− get_relative_path(&doc_save_event.path).to_string_lossy(),
478+
477− lines,
479+ // borrowing the same doc again to get around the borrow checker
478− bytes
480+ let doc = self.editor.document_mut(doc_save_event.doc_id).unwrap();
479− ));
481+ let id = doc.id();
482+ doc.detect_language(loader);
483+ let _ = self.editor.refresh_language_server(id);
480 }
484 }
485+
486+ // TODO: fix being overwritten by lsp
487+ self.editor.set_status(format!(
488+ "'{}' written, {}L {}B",
489+ get_relative_path(&doc_save_event.path).to_string_lossy(),
490+ lines,
491+ bytes
492+ ));
481 }
493 }
482
494
483 #[inline(always)]
495 #[inline(always)]
helix-term/src/commands.rs+1−8
@@ -2519,7 +2519,7 @@ async fn make_format_callback(
2519 write: Option<(Option<PathBuf>, bool)>,
2519 write: Option<(Option<PathBuf>, bool)>,
2520) -> anyhow::Result<job::Callback> {
2520) -> anyhow::Result<job::Callback> {
2521 let format = format.await?;
2521 let format = format.await?;
2522− let call: job::Callback = Callback::EditorCompositor(Box::new(move |editor, _compositor| {
2522+ let call: job::Callback = Callback::Editor(Box::new(move |editor| {
2523 if !editor.documents.contains_key(&doc_id) {
2523 if !editor.documents.contains_key(&doc_id) {
2524 return;
2524 return;
2525 }
2525 }
@@ -2527,7 +2527,6 @@ async fn make_format_callback(
2527 let scrolloff = editor.config().scrolloff;
2527 let scrolloff = editor.config().scrolloff;
2528 let doc = doc_mut!(editor, &doc_id);
2528 let doc = doc_mut!(editor, &doc_id);
2529 let view = view_mut!(editor);
2529 let view = view_mut!(editor);
2530− let loader = editor.syn_loader.clone();
2531
2530
2532 if doc.version() == doc_version {
2531 if doc.version() == doc_version {
2533 apply_transaction(&format, doc, view);
2532 apply_transaction(&format, doc, view);
@@ -2536,14 +2535,8 @@ async fn make_format_callback(
2536 view.ensure_cursor_in_view(doc, scrolloff);
2535 view.ensure_cursor_in_view(doc, scrolloff);
2537
2536
2538 if let Some((path, force)) = write {
2537 if let Some((path, force)) = write {
2539− let refresh_lang = path.is_some();
2540−
2541 if let Err(err) = doc.save(path, force) {
2538 if let Err(err) = doc.save(path, force) {
2542 editor.set_error(format!("Error saving: {}", err));
2539 editor.set_error(format!("Error saving: {}", err));
2543− } else if refresh_lang {
2544− let id = doc.id();
2545− doc.detect_language(loader);
2546− let _ = editor.refresh_language_server(id);
2547 }
2540 }
2548 }
2541 }
2549 } else {
2542 } else {