forked from extern/nushell
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:
@ -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 {
|
||||
|
@ -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());
|
||||
|
||||
|
@ -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()?;
|
||||
|
||||
|
@ -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);
|
||||
|
||||
|
Reference in New Issue
Block a user