@@ -937,26 +937,26 @@ impl Application {
938 self.event_loop(input_stream).await;
938 self.event_loop(input_stream).await;
940− let mut save_errs = Vec::new();
940+ // let mut save_errs = Vec::new();
942− for doc in self.editor.documents_mut() {
942+ // for doc in self.editor.documents_mut() {
943− if let Some(Err(err)) = doc.close().await {
943+ // if let Some(Err(err)) = doc.close().await {
944− save_errs.push((
944+ // save_errs.push((
945− doc.path()
945+ // doc.path()
946− .map(|path| path.to_string_lossy().into_owned())
946+ // .map(|path| path.to_string_lossy().into_owned())
947− .unwrap_or_else(|| "".into()),
947+ // .unwrap_or_else(|| "".into()),
953 let close_err = self.close().await.err();
953 let close_err = self.close().await.err();
954 restore_term()?;
954 restore_term()?;
956− for (path, err) in save_errs {
956+ // for (path, err) in save_errs {
957− self.editor.exit_code = 1;
957+ // self.editor.exit_code = 1;
958− eprintln!("Error closing '{}': {}", path, err);
958+ // eprintln!("Error closing '{}': {}", path, err);
961 if let Some(err) = close_err {
961 if let Some(err) = close_err {
962 self.editor.exit_code = 1;
962 self.editor.exit_code = 1;
@@ -967,12 +967,44 @@ impl Application {
969 pub async fn close(&mut self) -> anyhow::Result<()> {
969 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
972− if self.editor.close_language_servers(None).await.is_err() {
974+ let mut result = match self.jobs.finish().await {
973− log::error!("Timed out waiting for language servers to shutdown");
975+ Ok(_) => Ok(()),
977+ log::error!("Error executing job: {}", err);
976− Ok(())
982+ for doc in self.editor.documents_mut() {
983+ if let Some(save_result) = doc.close().await {
984+ result = match save_result {
987+ if let Some(path) = doc.path() {
989+ "Error saving document '{}': {}",
990+ path.to_string_lossy(),
1000+ match self.editor.close_language_servers(None).await {
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"