summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--helix-term/src/commands.rs14
-rw-r--r--helix-view/src/document.rs30
2 files changed, 30 insertions, 14 deletions
diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs
index 885afa18..cb5460af 100644
--- a/helix-term/src/commands.rs
+++ b/helix-term/src/commands.rs
@@ -4596,8 +4596,18 @@ fn shell_impl(
}
let output = process.wait_with_output()?;
- if !output.stderr.is_empty() {
- log::error!("Shell error: {}", String::from_utf8_lossy(&output.stderr));
+ if !output.status.success() {
+ if !output.stderr.is_empty() {
+ let err = String::from_utf8_lossy(&output.stderr).to_string();
+ log::error!("Shell error: {}", err);
+ bail!("Shell error: {}", err);
+ }
+ bail!("Shell command failed");
+ } else if !output.stderr.is_empty() {
+ log::debug!(
+ "Command printed to stderr: {}",
+ String::from_utf8_lossy(&output.stderr).to_string()
+ );
}
let str = std::str::from_utf8(&output.stdout)
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<String>),
}
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")
+ }
}
}
}