mirror of
https://github.com/nushell/nushell.git
synced 2025-07-01 07:00:37 +02:00
# Description This closes #7498, as well as fixes an issue reported in https://github.com/nushell/nushell/pull/7002#issuecomment-1368340773 BEFORE: ``` 〉[{foo: 'bar'} {}] | get foo Error: nu:🐚:column_not_found (link) × Cannot find column ╭─[entry #5:1:1] 1 │ [{foo: 'bar'} {}] | get foo · ────────┬──────── ─┬─ · │ ╰── value originates here · ╰── cannot find column 'Empty cell' ╰──── 〉[{foo: 'bar'} {}].foo ╭───┬─────╮ │ 0 │ bar │ │ 1 │ │ ╰───┴─────╯ ``` AFTER: ``` 〉[{foo: 'bar'} {}] | get foo Error: nu:🐚:column_not_found (link) × Cannot find column ╭─[entry #1:1:1] 1 │ [{foo: 'bar'} {}] | get foo · ─┬ ─┬─ · │ ╰── cannot find column 'foo' · ╰── value originates here ╰──── 〉[{foo: 'bar'} {}].foo Error: nu:🐚:column_not_found (link) × Cannot find column ╭─[entry #3:1:1] 1 │ [{foo: 'bar'} {}].foo · ─┬ ─┬─ · │ ╰── cannot find column 'foo' · ╰── value originates here ╰──── ``` EDIT: This also changes the semantics of `get`/`select` `-i` somewhat. I've decided to leave it like this because it works more intuitively with `default` and `compact`. BEFORE: ``` 〉[{a:1} {b:2} {a:3}] | select -i foo | to nuon null ``` AFTER: ``` 〉[{a:1} {b:2} {a:3}] | select -i foo | to nuon [[foo]; [null], [null], [null]] ``` # User-Facing Changes See above. EDIT: the issue with holes in cases like ` [{foo: 'bar'} {}].foo.0` versus ` [{foo: 'bar'} {}].0.foo` has been resolved. # 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.
This commit is contained in:
@ -8,7 +8,7 @@ fn nothing_fails_string() -> TestResult {
|
||||
|
||||
#[test]
|
||||
fn nothing_fails_int() -> TestResult {
|
||||
fail_test("$nothing.3", "Can't access")
|
||||
fail_test("$nothing.3", "doesn't support cell paths")
|
||||
}
|
||||
|
||||
// Tests for records
|
||||
@ -67,9 +67,9 @@ fn list_single_field_failure() -> TestResult {
|
||||
|
||||
// Test the scenario where the requested column is not present in all rows
|
||||
#[test]
|
||||
fn jagged_list_access_succeeds() -> TestResult {
|
||||
run_test("[{foo: 'bar'}, {}].foo == ['bar', $nothing]", "true")?;
|
||||
run_test("[{}, {foo: 'bar'}].foo == [$nothing, 'bar']", "true")
|
||||
fn jagged_list_access_fails() -> TestResult {
|
||||
fail_test("[{foo: 'bar'}, {}].foo", "cannot find column")?;
|
||||
fail_test("[{}, {foo: 'bar'}].foo", "cannot find column")
|
||||
}
|
||||
|
||||
// test that accessing a nonexistent row fails
|
||||
@ -81,8 +81,5 @@ fn list_row_access_failure() -> TestResult {
|
||||
// regression test for an old bug
|
||||
#[test]
|
||||
fn do_not_delve_too_deep_in_nested_lists() -> TestResult {
|
||||
fail_test(
|
||||
"[[{foo: bar}]].foo",
|
||||
"did not find anything under this name",
|
||||
)
|
||||
fail_test("[[{foo: bar}]].foo", "cannot find column")
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
use crate::tests::{run_test, TestResult};
|
||||
use crate::tests::{fail_test, run_test, TestResult};
|
||||
|
||||
#[test]
|
||||
fn cell_path_subexpr1() -> TestResult {
|
||||
@ -172,11 +172,10 @@ fn update_cell_path_1() -> TestResult {
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn missing_column_fills_in_nothing() -> TestResult {
|
||||
// The empty value will be replaced with null when fetching a column
|
||||
run_test(
|
||||
fn missing_column_errors() -> TestResult {
|
||||
fail_test(
|
||||
r#"[ { name: ABC, size: 20 }, { name: HIJ } ].size.1 == null"#,
|
||||
"true",
|
||||
"cannot find column",
|
||||
)
|
||||
}
|
||||
|
||||
@ -257,8 +256,20 @@ fn length_defaulted_columns() -> TestResult {
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn get_fuzzy() -> TestResult {
|
||||
run_test("(ls | get -i foo) == null", "true")
|
||||
fn nullify_errors() -> TestResult {
|
||||
run_test("([{a:1} {a:2} {a:3}] | get -i foo | length) == 3", "true")?;
|
||||
run_test(
|
||||
"([{a:1} {a:2} {a:3}] | get -i foo | to nuon) == '[null, null, null]'",
|
||||
"true",
|
||||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn nullify_holes() -> TestResult {
|
||||
run_test(
|
||||
"([{a:1} {b:2} {a:3}] | get -i a | to nuon) == '[1, null, 3]'",
|
||||
"true",
|
||||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
Reference in New Issue
Block a user