diff --git a/crates/nu-command/tests/commands/alias.rs b/crates/nu-command/tests/commands/alias.rs new file mode 100644 index 000000000..bb9cd3c27 --- /dev/null +++ b/crates/nu-command/tests/commands/alias.rs @@ -0,0 +1,13 @@ +use nu_test_support::{nu, pipeline}; + +#[test] +fn echo_range_is_lazy() { + let actual = nu!( + cwd: "tests/fixtures/formats", pipeline( + r#" + alias bar = source sample_def.nu; bar; greet + "# + )); + + assert_eq!(actual.out, "hello"); +} diff --git a/crates/nu-command/tests/commands/mod.rs b/crates/nu-command/tests/commands/mod.rs index bb17eddad..a3b2acd61 100644 --- a/crates/nu-command/tests/commands/mod.rs +++ b/crates/nu-command/tests/commands/mod.rs @@ -1,3 +1,4 @@ +mod alias; mod all; mod any; mod append; diff --git a/crates/nu-parser/src/parser.rs b/crates/nu-parser/src/parser.rs index 99af7e60e..b8c4f4de8 100644 --- a/crates/nu-parser/src/parser.rs +++ b/crates/nu-parser/src/parser.rs @@ -897,10 +897,19 @@ pub fn parse_call( new_spans.extend(&spans[(pos + 1)..]); } - working_set.enter_scope(); - working_set.hide_alias(&name); - let (mut result, err) = parse_expression(working_set, &new_spans, false); - working_set.exit_scope(); + let alias_id = working_set.hide_alias(&name); + let lite_command = LiteCommand { + comments: vec![], + parts: new_spans.clone(), + }; + let (mut result, err) = parse_builtin_commands(working_set, &lite_command); + if let Some(frame) = working_set.delta.scope.last_mut() { + if let Some(alias_id) = alias_id { + frame.aliases.insert(name.clone(), alias_id); + } + } + + let mut result = result.expressions.remove(0); result.replace_span(working_set, expansion_span, orig_span); diff --git a/tests/fixtures/formats/sample_def.nu b/tests/fixtures/formats/sample_def.nu new file mode 100644 index 000000000..a7f9a0602 --- /dev/null +++ b/tests/fixtures/formats/sample_def.nu @@ -0,0 +1,3 @@ +def greet [] { + "hello" +}