diff --git a/crates/nu-command/src/filters/sort.rs b/crates/nu-command/src/filters/sort.rs index 5c440ff5c..a6a3944e9 100644 --- a/crates/nu-command/src/filters/sort.rs +++ b/crates/nu-command/src/filters/sort.rs @@ -271,22 +271,12 @@ pub fn sort( insensitive: bool, natural: bool, ) -> Result<(), ShellError> { - if vec.is_empty() { - return Err(ShellError::GenericError( - "no values to work with".to_string(), - "".to_string(), - None, - Some("no values to work with".to_string()), - Vec::new(), - )); - } - - match &vec[0] { - Value::Record { + match vec.first() { + Some(Value::Record { cols, vals: _input_vals, .. - } => { + }) => { let columns = cols.clone(); vec.sort_by(|a, b| process(a, b, &columns, span, insensitive, natural)); } diff --git a/crates/nu-command/src/filters/uniq_by.rs b/crates/nu-command/src/filters/uniq_by.rs index 0c64b951a..c1e65e6a6 100644 --- a/crates/nu-command/src/filters/uniq_by.rs +++ b/crates/nu-command/src/filters/uniq_by.rs @@ -107,21 +107,11 @@ impl Command for UniqBy { } fn validate(vec: Vec, columns: &Vec, span: Span) -> Result<(), ShellError> { - if vec.is_empty() { - return Err(ShellError::GenericError( - "no values to work with".to_string(), - "".to_string(), - None, - Some("no values to work with".to_string()), - Vec::new(), - )); - } - - if let Value::Record { + if let Some(Value::Record { cols, vals: _input_vals, span: val_span, - } = &vec[0] + }) = vec.first() { if columns.is_empty() { // This uses the same format as the 'requires a column name' error in split_by.rs diff --git a/crates/nu-command/src/sort_utils.rs b/crates/nu-command/src/sort_utils.rs index fca2b4913..92d9e395f 100644 --- a/crates/nu-command/src/sort_utils.rs +++ b/crates/nu-command/src/sort_utils.rs @@ -61,22 +61,12 @@ pub fn sort( insensitive: bool, natural: bool, ) -> Result<(), ShellError> { - if vec.is_empty() { - return Err(ShellError::GenericError( - "no values to work with".to_string(), - "".to_string(), - None, - Some("no values to work with".to_string()), - Vec::new(), - )); - } - - match &vec[0] { - Value::Record { + match vec.first() { + Some(Value::Record { cols, vals: _input_vals, span: val_span, - } => { + }) => { if sort_columns.is_empty() { // This uses the same format as the 'requires a column name' error in split_by.rs return Err(ShellError::GenericError( diff --git a/crates/nu-command/tests/commands/sort.rs b/crates/nu-command/tests/commands/sort.rs index c72b3fa49..c99e14058 100644 --- a/crates/nu-command/tests/commands/sort.rs +++ b/crates/nu-command/tests/commands/sort.rs @@ -118,3 +118,10 @@ fn sort_record_values_insensitive_reverse() { assert_eq!(actual.out, r#"{"2": zed, "3": ABE, "1": abe}"#); } + +#[test] +fn sort_empty() { + let actual = nu!("[] | sort | to nuon"); + + assert_eq!(actual.out, "[]"); +} diff --git a/crates/nu-command/tests/commands/sort_by.rs b/crates/nu-command/tests/commands/sort_by.rs index 914f29e61..c39bb9e66 100644 --- a/crates/nu-command/tests/commands/sort_by.rs +++ b/crates/nu-command/tests/commands/sort_by.rs @@ -43,6 +43,13 @@ fn by_invalid_column() { assert!(actual.err.contains("value originates here")); } +#[test] +fn sort_by_empty() { + let actual = nu!("[] | sort-by foo | to nuon"); + + assert_eq!(actual.out, "[]"); +} + #[test] fn ls_sort_by_name_sensitive() { let actual = nu!( diff --git a/crates/nu-command/tests/commands/uniq.rs b/crates/nu-command/tests/commands/uniq.rs index 9246287ef..90ff7d5c3 100644 --- a/crates/nu-command/tests/commands/uniq.rs +++ b/crates/nu-command/tests/commands/uniq.rs @@ -61,6 +61,13 @@ fn uniq_values() { }) } +#[test] +fn uniq_empty() { + let actual = nu!("[] | uniq | to nuon"); + + assert_eq!(actual.out, "[]"); +} + #[test] fn nested_json_structures() { Playground::setup("uniq_test_3", |dirs, sandbox| { diff --git a/crates/nu-command/tests/commands/uniq_by.rs b/crates/nu-command/tests/commands/uniq_by.rs index 20100bbfa..08cca2d55 100644 --- a/crates/nu-command/tests/commands/uniq_by.rs +++ b/crates/nu-command/tests/commands/uniq_by.rs @@ -126,6 +126,13 @@ fn table() { assert_eq!(actual.out, expected.out); } +#[test] +fn uniq_by_empty() { + let actual = nu!("[] | uniq-by foo | to nuon"); + + assert_eq!(actual.out, "[]"); +} + #[test] fn uniq_by_multiple_columns() { let actual = nu!(