Should we keep old semantics of uniq command? (#5761)

* Update uniq tests with less surprising output

* Remove original nushell surprising semantics
This commit is contained in:
Mathspy 2022-06-14 00:04:29 -04:00 committed by GitHub
parent dc1248a454
commit 4fd4136d50
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -2,9 +2,7 @@ use std::collections::VecDeque;
use nu_protocol::ast::Call; use nu_protocol::ast::Call;
use nu_protocol::engine::{Command, EngineState, Stack}; use nu_protocol::engine::{Command, EngineState, Stack};
use nu_protocol::{ use nu_protocol::{Category, Example, IntoPipelineData, PipelineData, Signature, Span, Value};
Category, Example, IntoPipelineData, PipelineData, ShellError, Signature, Span, Value,
};
#[derive(Clone)] #[derive(Clone)]
pub struct Uniq; pub struct Uniq;
@ -62,12 +60,18 @@ impl Command for Uniq {
Example { Example {
description: "Only print duplicate lines, one for each group", description: "Only print duplicate lines, one for each group",
example: "[1 2 2] | uniq -d", example: "[1 2 2] | uniq -d",
result: Some(Value::test_int(2)), result: Some(Value::List {
vals: vec![Value::test_int(2)],
span: Span::test_data(),
}),
}, },
Example { Example {
description: "Only print unique lines lines", description: "Only print unique lines lines",
example: "[1 2 2] | uniq -u", example: "[1 2 2] | uniq -u",
result: Some(Value::test_int(1)), result: Some(Value::List {
vals: vec![Value::test_int(1)],
span: Span::test_data(),
}),
}, },
Example { Example {
description: "Ignore differences in case when comparing", description: "Ignore differences in case when comparing",
@ -182,21 +186,12 @@ fn uniq(
} }
} }
// keeps the original Nushell semantics Ok(Value::List {
if values_vec_deque.len() == 1 { vals: values_vec_deque.into_iter().collect(),
if let Some(x) = values_vec_deque.pop_front() { span: head,
Ok(x.into_pipeline_data().set_metadata(metadata))
} else {
Err(ShellError::NushellFailed("No input given...".to_string()))
}
} else {
Ok(Value::List {
vals: values_vec_deque.into_iter().collect(),
span: head,
}
.into_pipeline_data()
.set_metadata(metadata))
} }
.into_pipeline_data()
.set_metadata(metadata))
} }
#[cfg(test)] #[cfg(test)]