@@ -594,12 +594,10 @@ fn generate_impl_text_inner(
594594 let generic_params = adt. generic_param_list ( ) . map ( |generic_params| {
595595 let lifetime_params =
596596 generic_params. lifetime_params ( ) . map ( ast:: GenericParam :: LifetimeParam ) ;
597- let ty_or_const_params = generic_params. type_or_const_params ( ) . map ( |param| {
598- match param {
597+ let ty_or_const_params = generic_params. type_or_const_params ( ) . filter_map ( |param| {
598+ let param = match param {
599599 ast:: TypeOrConstParam :: Type ( param) => {
600- let param = param. clone_for_update ( ) ;
601600 // remove defaults since they can't be specified in impls
602- param. remove_default ( ) ;
603601 let mut bounds =
604602 param. type_bound_list ( ) . map_or_else ( Vec :: new, |it| it. bounds ( ) . collect ( ) ) ;
605603 if let Some ( trait_) = trait_text {
@@ -610,17 +608,16 @@ fn generate_impl_text_inner(
610608 }
611609 } ;
612610 // `{ty_param}: {bounds}`
613- let param =
614- make:: type_param ( param. name ( ) . unwrap ( ) , make:: type_bound_list ( bounds) ) ;
611+ let param = make:: type_param ( param. name ( ) ?, make:: type_bound_list ( bounds) ) ;
615612 ast:: GenericParam :: TypeParam ( param)
616613 }
617614 ast:: TypeOrConstParam :: Const ( param) => {
618- let param = param. clone_for_update ( ) ;
619615 // remove defaults since they can't be specified in impls
620- param. remove_default ( ) ;
616+ let param = make :: const_param ( param . name ( ) ? , param . ty ( ) ? ) ;
621617 ast:: GenericParam :: ConstParam ( param)
622618 }
623- }
619+ } ;
620+ Some ( param)
624621 } ) ;
625622
626623 make:: generic_param_list ( itertools:: chain ( lifetime_params, ty_or_const_params) )
@@ -695,12 +692,10 @@ fn generate_impl_inner(
695692 let generic_params = adt. generic_param_list ( ) . map ( |generic_params| {
696693 let lifetime_params =
697694 generic_params. lifetime_params ( ) . map ( ast:: GenericParam :: LifetimeParam ) ;
698- let ty_or_const_params = generic_params. type_or_const_params ( ) . map ( |param| {
699- match param {
695+ let ty_or_const_params = generic_params. type_or_const_params ( ) . filter_map ( |param| {
696+ let param = match param {
700697 ast:: TypeOrConstParam :: Type ( param) => {
701- let param = param. clone_for_update ( ) ;
702698 // remove defaults since they can't be specified in impls
703- param. remove_default ( ) ;
704699 let mut bounds =
705700 param. type_bound_list ( ) . map_or_else ( Vec :: new, |it| it. bounds ( ) . collect ( ) ) ;
706701 if let Some ( trait_) = & trait_ {
@@ -711,17 +706,16 @@ fn generate_impl_inner(
711706 }
712707 } ;
713708 // `{ty_param}: {bounds}`
714- let param =
715- make:: type_param ( param. name ( ) . unwrap ( ) , make:: type_bound_list ( bounds) ) ;
709+ let param = make:: type_param ( param. name ( ) ?, make:: type_bound_list ( bounds) ) ;
716710 ast:: GenericParam :: TypeParam ( param)
717711 }
718712 ast:: TypeOrConstParam :: Const ( param) => {
719- let param = param. clone_for_update ( ) ;
720713 // remove defaults since they can't be specified in impls
721- param. remove_default ( ) ;
714+ let param = make :: const_param ( param . name ( ) ? , param . ty ( ) ? ) ;
722715 ast:: GenericParam :: ConstParam ( param)
723716 }
724- }
717+ } ;
718+ Some ( param)
725719 } ) ;
726720
727721 make:: generic_param_list ( itertools:: chain ( lifetime_params, ty_or_const_params) )
0 commit comments