@@ -937,26 +937,26 @@ impl Application {
937937
938938 self.event_loop(input_stream).await;
939939
940− let mut save_errs = Vec::new();
941−
942− for doc in self.editor.documents_mut() {
943− if let Some(Err(err)) = doc.close().await {
944− save_errs.push((
945− doc.path()
946− .map(|path| path.to_string_lossy().into_owned())
947− .unwrap_or_else(|| "".into()),
948− err,
949− ));
950− }
951− }
940+ // let mut save_errs = Vec::new();
941+
942+ // for doc in self.editor.documents_mut() {
943+ // if let Some(Err(err)) = doc.close().await {
944+ // save_errs.push((
945+ // doc.path()
946+ // .map(|path| path.to_string_lossy().into_owned())
947+ // .unwrap_or_else(|| "".into()),
948+ // err,
949+ // ));
950+ // }
951+ // }
952952
953953 let close_err = self.close().await.err();
954954 restore_term()?;
955955
956− for (path, err) in save_errs {
957− self.editor.exit_code = 1;
958− eprintln!("Error closing '{}': {}", path, err);
959− }
956+ // for (path, err) in save_errs {
957+ // self.editor.exit_code = 1;
958+ // eprintln!("Error closing '{}': {}", path, err);
959+ // }
960960
961961 if let Some(err) = close_err {
962962 self.editor.exit_code = 1;
@@ -967,12 +967,44 @@ impl Application {
967967 }
968968
969969 pub async fn close(&mut self) -> anyhow::Result<()> {
970− self.jobs.finish().await?;
970+ // [NOTE] we intentionally do not return early for errors because we
971+ // want to try to run as much cleanup as we can, regardless of
972+ // errors along the way
971973
972− if self.editor.close_language_servers(None).await.is_err() {
973− log::error!("Timed out waiting for language servers to shutdown");
974+ let mut result = match self.jobs.finish().await {
975+ Ok(_) => Ok(()),
976+ Err(err) => {
977+ log::error!("Error executing job: {}", err);
978+ Err(err)
979+ }
974980 };
975981
976− Ok(())
982+ for doc in self.editor.documents_mut() {
983+ if let Some(save_result) = doc.close().await {
984+ result = match save_result {
985+ Ok(_) => result,
986+ Err(err) => {
987+ if let Some(path) = doc.path() {
988+ log::error!(
989+ "Error saving document '{}': {}",
990+ path.to_string_lossy(),
991+ err
992+ );
993+ }
994+ Err(err)
995+ }
996+ };
997+ }
998+ }
999+
1000+ match self.editor.close_language_servers(None).await {
1001+ Ok(_) => result,
1002+ Err(_) => {
1003+ log::error!("Timed out waiting for language servers to shutdown");
1004+ Err(anyhow::format_err!(
1005+ "Timed out waiting for language servers to shutdown"
1006+ ))
1007+ }
1008+ }
9771009 }
9781010}