forked from extern/nushell
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
@ -189,3 +189,10 @@ fn where_gt_null() {
|
|||||||
let actual = nu!("[{foo: 123} {}] | where foo? > 10 | to nuon");
|
let actual = nu!("[{foo: 123} {}] | where foo? > 10 | to nuon");
|
||||||
assert_eq!(actual.out, "[[foo]; [123]]");
|
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.
|
// Propagate errors by explicitly matching them before the final case.
|
||||||
Value::Error { error } => Err(*error),
|
Value::Error { error } => Err(*error),
|
||||||
|
Value::Nothing { .. } => Ok(PipelineIterator(PipelineData::empty())),
|
||||||
other => Err(ShellError::OnlySupportsThisInputType {
|
other => Err(ShellError::OnlySupportsThisInputType {
|
||||||
exp_input_type: "list, binary, raw data or range".into(),
|
exp_input_type: "list, binary, raw data or range".into(),
|
||||||
wrong_type: other.get_type().to_string(),
|
wrong_type: other.get_type().to_string(),
|
||||||
@ -309,12 +310,7 @@ impl PipelineData {
|
|||||||
src_span: other.expect_span(),
|
src_span: other.expect_span(),
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
PipelineData::Empty => Err(ShellError::OnlySupportsThisInputType {
|
PipelineData::Empty => Ok(PipelineIterator(PipelineData::empty())),
|
||||||
exp_input_type: "list, binary, raw data or range".into(),
|
|
||||||
wrong_type: "null".into(),
|
|
||||||
dst_span: span,
|
|
||||||
src_span: span,
|
|
||||||
}),
|
|
||||||
other => Ok(PipelineIterator(other)),
|
other => Ok(PipelineIterator(other)),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user