@@ -651,38 +651,19 @@ impl<'hir> Generics<'hir> {
651
651
& self ,
652
652
param_def_id : LocalDefId ,
653
653
) -> Option < ( Span , Option < Span > ) > {
654
- fn get_inner_ty < ' a , ' b > ( bound : & ' a GenericBound < ' b > ) -> Option < & ' a Ty < ' b > > {
655
- match bound {
656
- GenericBound :: Trait ( data, _) => {
657
- let segment = data. trait_ref . path . segments . first ( ) ?;
658
- if segment. args ( ) . parenthesized != GenericArgsParentheses :: ParenSugar {
659
- return None ;
660
- }
661
- let binding = segment. args ( ) . bindings . first ( ) ?;
662
- if let TypeBindingKind :: Equality { term : Term :: Ty ( ty) } = binding. kind {
663
- Some ( ty)
664
- } else {
665
- None
666
- }
667
- }
668
- _ => None ,
669
- }
670
- }
671
-
672
654
self . bounds_for_param ( param_def_id) . flat_map ( |bp| bp. bounds . iter ( ) . rev ( ) ) . find_map (
673
655
|bound| {
674
- let span_for_parentheses = get_inner_ty ( bound ) . and_then ( |ty| {
675
- if let TyKind :: TraitObject (
676
- _ ,
677
- _ ,
678
- TraitObjectSyntax :: Dyn | TraitObjectSyntax :: DynStar ,
679
- ) = ty . kind
680
- {
681
- ty . span . can_be_used_for_suggestions ( ) . then_some ( ty . span )
656
+ let span_for_parentheses = if let Some ( trait_ref ) = bound . trait_ref ( )
657
+ && let [ .. , segment ] = trait_ref . path . segments
658
+ && segment . args ( ) . parenthesized == GenericArgsParentheses :: ParenSugar
659
+ && let [ binding ] = segment . args ( ) . bindings
660
+ && let TypeBindingKind :: Equality { term : Term :: Ty ( ret_ty ) } = binding . kind
661
+ && let TyKind :: TraitObject ( _ , _ , TraitObjectSyntax :: Dyn | TraitObjectSyntax :: DynStar ) = ret_ty . kind
662
+ && ret_ty . span . can_be_used_for_suggestions ( ) {
663
+ Some ( ret_ty . span )
682
664
} else {
683
665
None
684
- }
685
- } ) ;
666
+ } ;
686
667
687
668
span_for_parentheses. map_or_else (
688
669
|| {
0 commit comments