Add ErrSpan extension trait for Result (#12626)

# Description
This adds an extension trait to `Result` that wraps errors in `Spanned`,
saving the effort of calling `.map_err(|err| err.into_spanned(span))`
every time. This will hopefully make it even more likely that someone
will want to use a spanned `io::Error` and make it easier to remove the
impl for `From<io::Error> for ShellError` because that doesn't have span
information.
This commit is contained in:
Devyn Cairns
2024-04-23 01:39:55 -07:00
committed by GitHub
parent b0acc1d890
commit 5c7f7883c8
10 changed files with 47 additions and 21 deletions

View File

@ -133,7 +133,7 @@ impl Command for Save {
.spawn(move || stderr.drain()),
})
.transpose()
.map_err(|e| e.into_spanned(span))?;
.err_span(span)?;
let res = stream_to_file(stdout, file, span, progress);
if let Some(h) = handler {

View File

@ -125,8 +125,7 @@ use it in your pipeline."#
if use_stderr {
let stderr = stderr
.map(|stderr| {
let iter = tee(stderr.stream, with_stream)
.map_err(|e| e.into_spanned(call.head))?;
let iter = tee(stderr.stream, with_stream).err_span(call.head)?;
Ok::<_, ShellError>(RawStream::new(
Box::new(iter.map(flatten_result)),
stderr.ctrlc,
@ -146,8 +145,7 @@ use it in your pipeline."#
} else {
let stdout = stdout
.map(|stdout| {
let iter = tee(stdout.stream, with_stream)
.map_err(|e| e.into_spanned(call.head))?;
let iter = tee(stdout.stream, with_stream).err_span(call.head)?;
Ok::<_, ShellError>(RawStream::new(
Box::new(iter.map(flatten_result)),
stdout.ctrlc,
@ -189,7 +187,7 @@ use it in your pipeline."#
// Make sure to drain any iterator produced to avoid unexpected behavior
result.and_then(|data| data.drain())
})
.map_err(|e| e.into_spanned(call.head))?
.err_span(call.head)?
.map(move |result| result.unwrap_or_else(|err| Value::error(err, closure_span)))
.into_pipeline_data_with_metadata(metadata, engine_state.ctrlc.clone());

View File

@ -62,7 +62,7 @@ impl Command for Complete {
}
})
.map(|handle| (handle, stderr_span))
.map_err(|err| err.into_spanned(call.head))
.err_span(call.head)
})
.transpose()?;

View File

@ -495,7 +495,7 @@ impl ExternalCommand {
Ok(())
})
.map_err(|e| e.into_spanned(head))?;
.err_span(head)?;
}
}
@ -580,7 +580,7 @@ impl ExternalCommand {
Ok(())
}
})
.map_err(|e| e.into_spanned(head))?;
.err_span(head)?;
let exit_code_receiver = ValueReceiver::new(exit_code_rx);