diff --git a/crates/nu-command/src/default_context.rs b/crates/nu-command/src/default_context.rs index b319f4569..837eda2bd 100644 --- a/crates/nu-command/src/default_context.rs +++ b/crates/nu-command/src/default_context.rs @@ -382,7 +382,7 @@ pub fn add_shell_command_context(mut engine_state: EngineState) -> EngineState { Seq, SeqDate, SeqChar, - Unfold, + Generate, }; // Hash diff --git a/crates/nu-command/src/generators/unfold.rs b/crates/nu-command/src/generators/generate.rs similarity index 94% rename from crates/nu-command/src/generators/unfold.rs rename to crates/nu-command/src/generators/generate.rs index b777cf6d8..6266c559b 100644 --- a/crates/nu-command/src/generators/unfold.rs +++ b/crates/nu-command/src/generators/generate.rs @@ -1,23 +1,22 @@ use itertools::unfold; - use nu_engine::{eval_block_with_early_return, CallExt}; -use nu_protocol::ast::Call; -use nu_protocol::engine::{Closure, Command, EngineState, Stack}; use nu_protocol::{ + ast::Call, + engine::{Closure, Command, EngineState, Stack}, Category, Example, IntoInterruptiblePipelineData, IntoPipelineData, PipelineData, ShellError, Signature, Span, Spanned, SyntaxShape, Type, Value, }; #[derive(Clone)] -pub struct Unfold; +pub struct Generate; -impl Command for Unfold { +impl Command for Generate { fn name(&self) -> &str { - "unfold" + "generate" } fn signature(&self) -> Signature { - Signature::build("unfold") + Signature::build("generate") .input_output_types(vec![ (Type::Nothing, Type::List(Box::new(Type::Any))), ( @@ -48,13 +47,13 @@ used as the next argument to the closure, otherwise generation stops. } fn search_terms(&self) -> Vec<&str> { - vec!["generate", "stream"] + vec!["unfold", "stream", "yield", "expand"] } fn examples(&self) -> Vec { vec![ Example { - example: "unfold 0 {|i| if $i <= 10 { {out: $i, next: ($i + 2)} }}", + example: "generate 0 {|i| if $i <= 10 { {out: $i, next: ($i + 2)} }}", description: "Generate a sequence of numbers", result: Some(Value::list( vec![ @@ -69,7 +68,7 @@ used as the next argument to the closure, otherwise generation stops. )), }, Example { - example: "unfold [0, 1] {|fib| {out: $fib.0, next: [$fib.1, ($fib.0 + $fib.1)]} } | first 10", + example: "generate [0, 1] {|fib| {out: $fib.0, next: [$fib.1, ($fib.0 + $fib.1)]} } | first 10", description: "Generate a stream of fibonacci numbers", result: Some(Value::list( vec![ @@ -226,6 +225,6 @@ mod test { fn test_examples() { use crate::test_examples; - test_examples(Unfold {}) + test_examples(Generate {}) } } diff --git a/crates/nu-command/src/generators/mod.rs b/crates/nu-command/src/generators/mod.rs index d243ed601..37f282c10 100644 --- a/crates/nu-command/src/generators/mod.rs +++ b/crates/nu-command/src/generators/mod.rs @@ -1,11 +1,11 @@ mod cal; +mod generate; mod seq; mod seq_char; mod seq_date; -mod unfold; pub use cal::Cal; +pub use generate::Generate; pub use seq::Seq; pub use seq_char::SeqChar; pub use seq_date::SeqDate; -pub use unfold::Unfold; diff --git a/crates/nu-command/tests/commands/unfold.rs b/crates/nu-command/tests/commands/generate.rs similarity index 64% rename from crates/nu-command/tests/commands/unfold.rs rename to crates/nu-command/tests/commands/generate.rs index acbdfa342..9dc214251 100644 --- a/crates/nu-command/tests/commands/unfold.rs +++ b/crates/nu-command/tests/commands/generate.rs @@ -1,25 +1,26 @@ use nu_test_support::{nu, pipeline}; #[test] -fn unfold_no_next_break() { - let actual = - nu!("unfold 1 {|x| if $x == 3 { {out: $x}} else { {out: $x, next: ($x + 1)} }} | to nuon"); +fn generate_no_next_break() { + let actual = nu!( + "generate 1 {|x| if $x == 3 { {out: $x}} else { {out: $x, next: ($x + 1)} }} | to nuon" + ); assert_eq!(actual.out, "[1, 2, 3]"); } #[test] -fn unfold_null_break() { - let actual = nu!("unfold 1 {|x| if $x <= 3 { {out: $x, next: ($x + 1)} }} | to nuon"); +fn generate_null_break() { + let actual = nu!("generate 1 {|x| if $x <= 3 { {out: $x, next: ($x + 1)} }} | to nuon"); assert_eq!(actual.out, "[1, 2, 3]"); } #[test] -fn unfold_allows_empty_output() { +fn generate_allows_empty_output() { let actual = nu!(pipeline( r#" - unfold 0 {|x| + generate 0 {|x| if $x == 1 { {next: ($x + 1)} } else if $x < 3 { @@ -33,10 +34,10 @@ fn unfold_allows_empty_output() { } #[test] -fn unfold_allows_no_output() { +fn generate_allows_no_output() { let actual = nu!(pipeline( r#" - unfold 0 {|x| + generate 0 {|x| if $x < 3 { {next: ($x + 1)} } @@ -48,10 +49,10 @@ fn unfold_allows_no_output() { } #[test] -fn unfold_allows_null_state() { +fn generate_allows_null_state() { let actual = nu!(pipeline( r#" - unfold 0 {|x| + generate 0 {|x| if $x == null { {out: "done"} } else if $x < 1 { @@ -67,10 +68,10 @@ fn unfold_allows_null_state() { } #[test] -fn unfold_allows_null_output() { +fn generate_allows_null_output() { let actual = nu!(pipeline( r#" - unfold 0 {|x| + generate 0 {|x| if $x == 3 { {out: "done"} } else { @@ -84,19 +85,19 @@ fn unfold_allows_null_output() { } #[test] -fn unfold_disallows_extra_keys() { - let actual = nu!("unfold 0 {|x| {foo: bar, out: $x}}"); +fn generate_disallows_extra_keys() { + let actual = nu!("generate 0 {|x| {foo: bar, out: $x}}"); assert!(actual.err.contains("Invalid block return")); } #[test] -fn unfold_disallows_list() { - let actual = nu!("unfold 0 {|x| [$x, ($x + 1)]}"); +fn generate_disallows_list() { + let actual = nu!("generate 0 {|x| [$x, ($x + 1)]}"); assert!(actual.err.contains("Invalid block return")); } #[test] -fn unfold_disallows_primitive() { - let actual = nu!("unfold 0 {|x| 1}"); +fn generate_disallows_primitive() { + let actual = nu!("generate 0 {|x| 1}"); assert!(actual.err.contains("Invalid block return")); } diff --git a/crates/nu-command/tests/commands/mod.rs b/crates/nu-command/tests/commands/mod.rs index 2a3afaab0..987b106f1 100644 --- a/crates/nu-command/tests/commands/mod.rs +++ b/crates/nu-command/tests/commands/mod.rs @@ -33,6 +33,7 @@ mod flatten; mod for_; #[cfg(feature = "extra")] mod format; +mod generate; mod get; mod glob; mod group_by; @@ -103,7 +104,6 @@ mod touch; mod transpose; mod try_; mod ucp; -mod unfold; mod uniq; mod uniq_by; mod update;