mirror of
https://github.com/nushell/nushell
synced 2024-12-26 13:03:07 +00:00
Treat empty pipelines as pass-through (#8395)
# Description This allows empty pipelines to pass their emptiness through a filter. This helps fix issues like trying to run a filter on an `ls` in an empty directory. It also feels a bit more reasonable that a filter filters what is *there* but doesn't require something to be there. fixes #8393 # User-Facing Changes No breaking changes (that I know of). Should allow filtering to be a little less surprising with emptiness. # Tests + Formatting Don't forget to add tests that cover your changes. Make sure you've run and fixed any issues with these commands: - `cargo fmt --all -- --check` to check standard code formatting (`cargo fmt --all` applies these changes) - `cargo clippy --workspace -- -D warnings -D clippy::unwrap_used -A clippy::needless_collect` to check that you're using the standard code style - `cargo test --workspace` to check that all tests pass # After Submitting If your PR had any user-facing changes, update [the documentation](https://github.com/nushell/nushell.github.io) after the PR is merged, if necessary. This will help us keep the docs up to date. --------- Co-authored-by: amtoine <stevan.antoine@gmail.com>
This commit is contained in:
parent
c12b211075
commit
1d5e7b441b
2 changed files with 9 additions and 6 deletions
|
@ -189,3 +189,10 @@ fn where_gt_null() {
|
|||
let actual = nu!("[{foo: 123} {}] | where foo? > 10 | to nuon");
|
||||
assert_eq!(actual.out, "[[foo]; [123]]");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn pass_through_empty_pipelines() {
|
||||
let actual = nu!(cwd: ".", pipeline(r#"null | where name == "foo" | to json"#));
|
||||
|
||||
assert_eq!(actual.out, "[]");
|
||||
}
|
||||
|
|
|
@ -302,6 +302,7 @@ impl PipelineData {
|
|||
},
|
||||
// Propagate errors by explicitly matching them before the final case.
|
||||
Value::Error { error } => Err(*error),
|
||||
Value::Nothing { .. } => Ok(PipelineIterator(PipelineData::empty())),
|
||||
other => Err(ShellError::OnlySupportsThisInputType {
|
||||
exp_input_type: "list, binary, raw data or range".into(),
|
||||
wrong_type: other.get_type().to_string(),
|
||||
|
@ -309,12 +310,7 @@ impl PipelineData {
|
|||
src_span: other.expect_span(),
|
||||
}),
|
||||
},
|
||||
PipelineData::Empty => Err(ShellError::OnlySupportsThisInputType {
|
||||
exp_input_type: "list, binary, raw data or range".into(),
|
||||
wrong_type: "null".into(),
|
||||
dst_span: span,
|
||||
src_span: span,
|
||||
}),
|
||||
PipelineData::Empty => Ok(PipelineIterator(PipelineData::empty())),
|
||||
other => Ok(PipelineIterator(other)),
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue