@@ -374,7 +374,7 @@ fn gen_update_from_arg_matches(
374374) -> TokenStream {
375375 use syn:: Fields :: * ;
376376
377- let ( flatten_variants , variants) : ( Vec < _ > , Vec < _ > ) = variants
377+ let variants: Vec < _ > = variants
378378 . iter ( )
379379 . filter_map ( |variant| {
380380 let attrs = Attrs :: from_variant (
@@ -383,16 +383,13 @@ fn gen_update_from_arg_matches(
383383 parent_attribute. env_casing ( ) ,
384384 ) ;
385385
386- if let Kind :: ExternalSubcommand = & * attrs. kind ( ) {
387- None
388- } else {
389- Some ( ( variant, attrs) )
386+ match & * attrs. kind ( ) {
387+ // Fallback to `from_arg_matches`
388+ Kind :: ExternalSubcommand | Kind :: Flatten => None ,
389+ _ => Some ( ( variant, attrs) ) ,
390390 }
391391 } )
392- . partition ( |( _, attrs) | {
393- let kind = attrs. kind ( ) ;
394- matches ! ( & * kind, Kind :: Flatten )
395- } ) ;
392+ . collect ( ) ;
396393
397394 let subcommands = variants. iter ( ) . map ( |( variant, attrs) | {
398395 let sub_name = attrs. cased_name ( ) ;
@@ -441,29 +438,6 @@ fn gen_update_from_arg_matches(
441438 }
442439 } ) ;
443440
444- let child_subcommands = flatten_variants. iter ( ) . map ( |( variant, attrs) | {
445- let sub_name = attrs. cased_name ( ) ;
446- let variant_name = & variant. ident ;
447- let ( pattern, updater) = match variant. fields {
448- Unnamed ( ref fields) if fields. unnamed . len ( ) == 1 => {
449- let ty = & fields. unnamed [ 0 ] ;
450- (
451- quote ! ( ( ref mut arg) ) ,
452- quote ! {
453- <#ty as clap:: FromArgMatches >:: update_from_arg_matches( arg, sub_arg_matches) ;
454- } ,
455- )
456- }
457- _ => abort ! (
458- variant,
459- "`flatten` is usable only with single-typed tuple variants"
460- ) ,
461- } ;
462- quote ! {
463- ( #sub_name, #name :: #variant_name #pattern) => { #updater }
464- }
465- } ) ;
466-
467441 quote ! {
468442 fn update_from_arg_matches<' b>(
469443 & mut self ,
@@ -472,7 +446,6 @@ fn gen_update_from_arg_matches(
472446 if let Some ( ( name, sub_arg_matches) ) = arg_matches. subcommand( ) {
473447 match ( name, self ) {
474448 #( #subcommands ) , *
475- #( #child_subcommands ) , *
476449 ( other_name, s) => {
477450 if let Some ( sub) = <Self as clap:: FromArgMatches >:: from_arg_matches( arg_matches) {
478451 * s = sub;
0 commit comments