Fix #3213 Rest arg is not optional (#3303)

This commit is contained in:
Leonhard Kipp 2021-04-12 04:37:36 +02:00 committed by GitHub
parent 5f550a355b
commit 52d69bb021
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 0 deletions

View File

@ -137,6 +137,13 @@ impl WholeStreamCommand for Arc<Block> {
UntaggedValue::Table(elements).into_value(Span::new(start, end)),
);
}
} else if block.params.rest_positional.is_some() {
//If there is a rest arg, but no args were provided,
//we have to set $rest to an empty table
ctx.scope.add_var(
"$rest",
UntaggedValue::Table(Vec::new()).into_value(Span::new(0, 0)),
);
}
if let Some(args) = evaluated.args.named {
for named in &block.params.named {

View File

@ -278,6 +278,19 @@ fn run_custom_command_with_rest_and_flag() {
assert_eq!(actual.out, r#"["world","hello","yay"]"#);
}
#[test]
fn run_custom_command_with_empty_rest() {
let actual = nu!(
cwd: ".",
r#"
def rest-me-with-empty-rest [...rest: string] { echo $rest }; rest-me-with-empty-rest
"#
);
assert_eq!(actual.out, r#""#);
assert_eq!(actual.err, r#""#);
}
#[test]
fn set_variable() {
let actual = nu!(