@@ -401,6 +401,11 @@ impl<'a, 'v, 'ab, 'u, 'h, 'ar> App<'a, 'v, 'ab, 'u, 'h, 'ar>{
401
401
/// # .get_matches();
402
402
/// ```
403
403
pub fn arg ( mut self , a : Arg < ' ar , ' ar , ' ar , ' ar , ' ar , ' ar > ) -> App < ' a , ' v , ' ab , ' u , ' h , ' ar > {
404
+ self . add_arg ( a) ;
405
+ self
406
+ }
407
+
408
+ fn add_arg ( & mut self , a : Arg < ' ar , ' ar , ' ar , ' ar , ' ar , ' ar > ) {
404
409
if self . flags . contains_key ( a. name ) ||
405
410
self . opts . contains_key ( a. name ) ||
406
411
self . positionals_name . contains_key ( a. name ) {
@@ -635,7 +640,6 @@ impl<'a, 'v, 'ab, 'u, 'h, 'ar> App<'a, 'v, 'ab, 'u, 'h, 'ar>{
635
640
}
636
641
self . global_args . push ( a) ;
637
642
}
638
- self
639
643
}
640
644
641
645
/// Adds multiple arguments to the list of valid possibilties by iterating over a Vec of Args
@@ -824,14 +828,9 @@ impl<'a, 'v, 'ab, 'u, 'h, 'ar> App<'a, 'v, 'ab, 'u, 'h, 'ar>{
824
828
/// // Additional subcommand configuration goes here, such as other arguments...
825
829
/// # .get_matches();
826
830
/// ```
827
- pub fn subcommand ( mut self , mut subcmd : App < ' a , ' v , ' ab , ' u , ' h , ' ar > )
831
+ pub fn subcommand ( mut self , subcmd : App < ' a , ' v , ' ab , ' u , ' h , ' ar > )
828
832
-> App < ' a , ' v , ' ab , ' u , ' h , ' ar > {
829
833
if subcmd. name == "help" { self . needs_subcmd_help = false ; }
830
- {
831
- for a in self . global_args . iter ( ) {
832
- subcmd = subcmd. arg ( a. into ( ) ) ;
833
- }
834
- }
835
834
self . subcommands . insert ( subcmd. name . clone ( ) , subcmd) ;
836
835
self
837
836
}
@@ -1317,9 +1316,7 @@ impl<'a, 'v, 'ab, 'u, 'h, 'ar> App<'a, 'v, 'ab, 'u, 'h, 'ar>{
1317
1316
// the real parsing function for subcommands
1318
1317
pub fn get_matches ( mut self ) -> ArgMatches < ' ar , ' ar > {
1319
1318
self . verify_positionals ( ) ;
1320
- for ( _, sc) in self . subcommands . iter_mut ( ) {
1321
- sc. verify_positionals ( ) ;
1322
- }
1319
+ self . propogate_globals ( ) ;
1323
1320
1324
1321
let mut matches = ArgMatches :: new ( ) ;
1325
1322
@@ -1379,6 +1376,17 @@ impl<'a, 'v, 'ab, 'u, 'h, 'ar> App<'a, 'v, 'ab, 'u, 'h, 'ar>{
1379
1376
}
1380
1377
}
1381
1378
1379
+ fn propogate_globals ( & mut self ) {
1380
+ for ( _, sc) in self . subcommands . iter_mut ( ) {
1381
+ {
1382
+ for a in self . global_args . iter ( ) {
1383
+ sc. add_arg ( a. into ( ) ) ;
1384
+ }
1385
+ }
1386
+ sc. propogate_globals ( ) ;
1387
+ }
1388
+ }
1389
+
1382
1390
/// Returns a suffix that can be empty, or is the standard 'did you mean phrase
1383
1391
fn did_you_mean_suffix < ' z , T , I > ( arg : & str , values : I , style : DidYouMeanMessageStyle )
1384
1392
-> ( String , Option < & ' z str > )
0 commit comments