diff --git a/crates/nu-command/src/filters/filter.rs b/crates/nu-command/src/filters/filter.rs index f7ae8ab970..3ec7e14ee4 100644 --- a/crates/nu-command/src/filters/filter.rs +++ b/crates/nu-command/src/filters/filter.rs @@ -1,5 +1,5 @@ use super::utils::chain_error_with_input; -use nu_engine::{get_eval_block, CallExt}; +use nu_engine::{get_eval_block_with_early_return, CallExt}; use nu_protocol::ast::Call; use nu_protocol::engine::{Closure, Command, EngineState, Stack}; @@ -62,7 +62,7 @@ a variable. On the other hand, the "row condition" syntax is not supported."# let orig_env_vars = stack.env_vars.clone(); let orig_env_hidden = stack.env_hidden.clone(); let span = call.head; - let eval_block = get_eval_block(&engine_state); + let eval_block_with_early_return = get_eval_block_with_early_return(&engine_state); match input { PipelineData::Empty => Ok(PipelineData::Empty), @@ -84,7 +84,7 @@ a variable. On the other hand, the "row condition" syntax is not supported."# } } - match eval_block( + match eval_block_with_early_return( &engine_state, &mut stack, &block, @@ -126,7 +126,7 @@ a variable. On the other hand, the "row condition" syntax is not supported."# } } - match eval_block( + match eval_block_with_early_return( &engine_state, &mut stack, &block, @@ -159,7 +159,7 @@ a variable. On the other hand, the "row condition" syntax is not supported."# } } - Ok(match eval_block( + Ok(match eval_block_with_early_return( &engine_state, &mut stack, &block, diff --git a/crates/nu-command/tests/commands/filter.rs b/crates/nu-command/tests/commands/filter.rs new file mode 100644 index 0000000000..a1e8204eaa --- /dev/null +++ b/crates/nu-command/tests/commands/filter.rs @@ -0,0 +1,18 @@ +use nu_test_support::{nu, pipeline}; + +#[test] +fn filter_with_return_in_closure() { + let actual = nu!(pipeline( + " + 1..10 | filter { |it| + if $it mod 2 == 0 { + return true + }; + return false; + } | to nuon --raw + " + )); + + assert_eq!(actual.out, "[2, 4, 6, 8, 10]"); + assert!(actual.err.is_empty()); +} diff --git a/crates/nu-command/tests/commands/mod.rs b/crates/nu-command/tests/commands/mod.rs index 956f26f083..ddb84a72c0 100644 --- a/crates/nu-command/tests/commands/mod.rs +++ b/crates/nu-command/tests/commands/mod.rs @@ -30,6 +30,7 @@ mod every; mod exec; mod export_def; mod fill; +mod filter; mod find; mod first; mod flatten;