suppress the parser error for an insufficient number of required arguments if the named keyword argument 'help' is given (#1659)

This commit is contained in:
rimathia 2020-04-25 18:45:45 +02:00 committed by GitHub
parent 846a779516
commit e7767ab7b3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 37 additions and 5 deletions

View File

@ -30,3 +30,32 @@ fn summarizes() {
// 50% // 50%
}) })
} }
#[test]
fn help() {
Playground::setup("histogram_test_help", |dirs, _sandbox| {
let help_command = nu!(
cwd: dirs.test(), pipeline(
r#"
help histogram
"#
));
let help_short = nu!(
cwd: dirs.test(), pipeline(
r#"
histogram -h
"#
));
let help_long = nu!(
cwd: dirs.test(), pipeline(
r#"
histogram --help
"#
));
assert_eq!(help_short, help_command);
assert_eq!(help_long, help_command);
})
}

View File

@ -976,11 +976,14 @@ fn parse_internal_command(
} }
} }
if positional.len() < required_arg_count && error.is_none() { if positional.len() < required_arg_count && error.is_none() {
let (_, name) = &signature.positional[positional.len()]; // to make "command -h" work even if required arguments are missing
error = Some(ParseError::argument_error( if !named.named.contains_key("help") {
lite_cmd.name.clone(), let (_, name) = &signature.positional[positional.len()];
ArgumentError::MissingMandatoryPositional(name.to_owned()), error = Some(ParseError::argument_error(
)); lite_cmd.name.clone(),
ArgumentError::MissingMandatoryPositional(name.to_owned()),
));
}
} }
if !named.is_empty() { if !named.is_empty() {