Skip to content

Commit 060c6da

Browse files
authored
Merge pull request #2590 from epage/dead
fix(derive): Don't generate dead code
2 parents fbd8e6d + a8ba4c3 commit 060c6da

File tree

1 file changed

+6
-33
lines changed

1 file changed

+6
-33
lines changed

clap_derive/src/derives/subcommand.rs

Lines changed: 6 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)