generator: Don't zip the same iterator with and without filter
`constants` is iterated twice here: once with a filter, the other time without, and the results are zipped together. Besides being able to simplify the entire execution to just one `iter()` without intermediary iterators, removing `.zip()` makes it impossible for the results in both iterators to get mismatched when the `filter` inevitably skips elements. Fortunately no such cases seem to exist, or at least not that effect the resulting generated code.
This commit is contained in:
parent
ac94739e11
commit
fe55ad73bd
|
@ -1426,28 +1426,20 @@ pub fn bitflags_impl_block(
|
||||||
.filter(|constant| constant.notation() != Some(BACKWARDS_COMPATIBLE_ALIAS_COMMENT))
|
.filter(|constant| constant.notation() != Some(BACKWARDS_COMPATIBLE_ALIAS_COMMENT))
|
||||||
.map(|constant| {
|
.map(|constant| {
|
||||||
let variant_ident = constant.variant_ident(enum_name);
|
let variant_ident = constant.variant_ident(enum_name);
|
||||||
|
let notation = constant.doc_attribute();
|
||||||
let constant = constant.constant(enum_name);
|
let constant = constant.constant(enum_name);
|
||||||
let tokens = if let Constant::Alias(_) = &constant {
|
let value = if let Constant::Alias(_) = &constant {
|
||||||
quote!(#constant)
|
quote!(#constant)
|
||||||
} else {
|
} else {
|
||||||
quote!(Self(#constant))
|
quote!(Self(#constant))
|
||||||
};
|
};
|
||||||
(variant_ident, tokens)
|
|
||||||
})
|
|
||||||
.collect_vec();
|
|
||||||
|
|
||||||
let notations = constants.iter().map(|constant| constant.doc_attribute());
|
|
||||||
|
|
||||||
let variants =
|
|
||||||
variants
|
|
||||||
.iter()
|
|
||||||
.zip(notations.clone())
|
|
||||||
.map(|((variant_ident, value), ref notation)| {
|
|
||||||
quote! {
|
quote! {
|
||||||
#notation
|
#notation
|
||||||
pub const #variant_ident: Self = #value;
|
pub const #variant_ident: Self = #value;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
quote! {
|
quote! {
|
||||||
impl #ident {
|
impl #ident {
|
||||||
#(#variants)*
|
#(#variants)*
|
||||||
|
|
Loading…
Reference in a new issue