From d1273051fcdf3cd19b20f0d4a4ba64872eeed334 Mon Sep 17 00:00:00 2001 From: Ed Page Date: Fri, 11 Feb 2022 15:10:38 -0600 Subject: [PATCH] fix(derive): Give more meaningful error on missing subcommand Showing help on `$ cmd` makes sense but when an arg is present but not subcommand, that suggests the user missed something, so we should show a more specific error message. Compatibility note: Settings we apply for subcommands have changed. Fixes #3280 --- clap_derive/src/derives/args.rs | 6 +++--- clap_derive/src/derives/into_app.rs | 3 ++- clap_derive/src/derives/subcommand.rs | 4 +++- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/clap_derive/src/derives/args.rs b/clap_derive/src/derives/args.rs index 291b6287d24..2e8aa4e2983 100644 --- a/clap_derive/src/derives/args.rs +++ b/clap_derive/src/derives/args.rs @@ -168,9 +168,9 @@ pub fn gen_augment( quote!() } else { quote_spanned! { kind.span()=> - let #app_var = #app_var.setting( - clap::AppSettings::SubcommandRequiredElseHelp - ); + let #app_var = #app_var + .subcommand_required(true) + .arg_required_else_help(true); } }; diff --git a/clap_derive/src/derives/into_app.rs b/clap_derive/src/derives/into_app.rs index a7842707a93..9573504c0c4 100644 --- a/clap_derive/src/derives/into_app.rs +++ b/clap_derive/src/derives/into_app.rs @@ -104,7 +104,8 @@ pub fn gen_for_enum(enum_name: &Ident, generics: &Generics, attrs: &[Attribute]) impl #impl_generics clap::IntoApp for #enum_name #ty_generics #where_clause { fn into_app<'b>() -> clap::App<'b> { let #app_var = clap::App::new(#name) - .setting(clap::AppSettings::SubcommandRequiredElseHelp); + .subcommand_required(true) + .arg_required_else_help(true); ::augment_subcommands(#app_var) } diff --git a/clap_derive/src/derives/subcommand.rs b/clap_derive/src/derives/subcommand.rs index 1e53375fb9a..3301bdda76f 100644 --- a/clap_derive/src/derives/subcommand.rs +++ b/clap_derive/src/derives/subcommand.rs @@ -248,7 +248,9 @@ fn gen_augment( let #subcommand_var = clap::App::new(#name); let #subcommand_var = #subcommand_var #initial_app_methods; let #subcommand_var = #arg_block; - let #subcommand_var = #subcommand_var.setting(clap::AppSettings::SubcommandRequiredElseHelp); + let #subcommand_var = #subcommand_var + .subcommand_required(true) + .arg_required_else_help(true); #subcommand_var #final_from_attrs }); };