return Error if get meet nothing and without "i" (#7002)

This commit is contained in:
Access 2022-12-31 19:27:09 +08:00 committed by GitHub
parent 9382dd6d55
commit 81a7d17b33
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 37 additions and 5 deletions

View File

@ -74,7 +74,29 @@ impl Command for Get {
Err(_) => Ok(Value::Nothing { span: call.head }.into_pipeline_data()),
}
} else {
output
match output {
Ok(val) => {
let val_check = val.into_value(span);
match val_check {
Value::List {
ref vals,
span: spanchild,
} => {
if vals.iter().any(|unit| unit.is_empty()) {
Err(nu_protocol::ShellError::CantFindColumn(
"Empty cell".to_string(),
spanchild,
span,
))
} else {
Ok(val_check.into_pipeline_data())
}
}
val => Ok(val.into_pipeline_data()),
}
}
Err(e) => Err(e),
}
}
} else {
let mut output = vec![];
@ -87,8 +109,18 @@ impl Command for Get {
let val = input.clone().follow_cell_path(&path.members, !sensitive);
if ignore_errors {
if let Ok(val) = val {
output.push(val);
match val {
Ok(Value::Nothing { span: spanchild }) => {
return Err(nu_protocol::ShellError::CantFindColumn(
"Nothing".to_string(),
spanchild,
span,
));
}
Ok(val) => {
output.push(val);
}
Err(_) => {}
}
} else {
output.push(val?);

View File

@ -71,7 +71,7 @@ fn cal_sees_pipeline_year() {
let actual = nu!(
cwd: ".", pipeline(
r#"
cal --full-year 1020 | get monday | first 4 | to json -r
cal --full-year 1020 | get -i monday | first 4 | to json -r
"#
));

View File

@ -16,7 +16,7 @@ fn filters_by_unit_size_comparison() {
fn filters_with_nothing_comparison() {
let actual = nu!(
cwd: "tests/fixtures/formats",
r#"'[{"foo": 3}, {"foo": null}, {"foo": 4}]' | from json | get foo | compact | where $it > 1 | math sum"#
r#"'[{"foo": 3}, {"foo": null}, {"foo": 4}]' | from json | get -i foo | compact | where $it > 1 | math sum"#
);
assert_eq!(actual.out, "7");