From d2cec25395e01ded0977c1314e377cb24186c6c5 Mon Sep 17 00:00:00 2001 From: PiergiorgioZagaria Date: Tue, 30 Aug 2022 04:02:34 +0200 Subject: Fix process spawning error handling (#3349) * Fix process spawning error handling * Log stderr in any case--- helix-view/src/document.rs | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) (limited to 'helix-view') diff --git a/helix-view/src/document.rs b/helix-view/src/document.rs index 0668e99d..b2a66415 100644 --- a/helix-view/src/document.rs +++ b/helix-view/src/document.rs @@ -440,17 +440,22 @@ impl Document { .await .map_err(|_| FormatterError::WaitForOutputFailed)?; - if !output.stderr.is_empty() { - return Err(FormatterError::Stderr( - String::from_utf8_lossy(&output.stderr).to_string(), - )); - } - if !output.status.success() { - return Err(FormatterError::NonZeroExitStatus); + if !output.stderr.is_empty() { + let err = String::from_utf8_lossy(&output.stderr).to_string(); + log::error!("Formatter error: {}", err); + return Err(FormatterError::NonZeroExitStatus(Some(err))); + } + + return Err(FormatterError::NonZeroExitStatus(None)); + } else if !output.stderr.is_empty() { + log::debug!( + "Formatter printed to stderr: {}", + String::from_utf8_lossy(&output.stderr).to_string() + ); } - let str = String::from_utf8(output.stdout) + let str = std::str::from_utf8(&output.stdout) .map_err(|_| FormatterError::InvalidUtf8Output)?; Ok(helix_core::diff::compare_ropes(&text, &Rope::from(str))) @@ -1102,10 +1107,9 @@ pub enum FormatterError { }, BrokenStdin, WaitForOutputFailed, - Stderr(String), InvalidUtf8Output, DiskReloadError(String), - NonZeroExitStatus, + NonZeroExitStatus(Option), } impl std::error::Error for FormatterError {} @@ -1118,10 +1122,12 @@ impl Display for FormatterError { } Self::BrokenStdin => write!(f, "Could not write to formatter stdin"), Self::WaitForOutputFailed => write!(f, "Waiting for formatter output failed"), - Self::Stderr(output) => write!(f, "Formatter error: {}", output), Self::InvalidUtf8Output => write!(f, "Invalid UTF-8 formatter output"), Self::DiskReloadError(error) => write!(f, "Error reloading file from disk: {}", error), - Self::NonZeroExitStatus => write!(f, "Formatter exited with non zero exit status:"), + Self::NonZeroExitStatus(Some(output)) => write!(f, "Formatter error: {}", output), + Self::NonZeroExitStatus(None) => { + write!(f, "Formatter exited with non zero exit status") + } } } } -- cgit v1.2.3-70-g09d2