@@ -651,38 +651,19 @@ impl<'hir> Generics<'hir> {
651651 & self ,
652652 param_def_id : LocalDefId ,
653653 ) -> 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-
672654 self . bounds_for_param ( param_def_id) . flat_map ( |bp| bp. bounds . iter ( ) . rev ( ) ) . find_map (
673655 |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 )
682664 } else {
683665 None
684- }
685- } ) ;
666+ } ;
686667
687668 span_for_parentheses. map_or_else (
688669 || {
0 commit comments