@@ -1419,62 +1419,54 @@ fn deny_equality_constraints(
1419
1419
let mut err = errors:: EqualityInWhere { span : predicate. span , assoc : None , assoc2 : None } ;
1420
1420
1421
1421
// Given `<A as Foo>::Bar = RhsTy`, suggest `A: Foo<Bar = RhsTy>`.
1422
- if let TyKind :: Path ( Some ( qself) , full_path) = & predicate. lhs_ty . kind {
1423
- if let TyKind :: Path ( None , path) = & qself. ty . kind {
1424
- match & path. segments [ ..] {
1425
- [ PathSegment { ident, args : None , .. } ] => {
1426
- for param in & generics. params {
1427
- if param. ident == * ident {
1428
- let param = ident;
1429
- match & full_path. segments [ qself. position ..] {
1430
- [ PathSegment { ident, args, .. } ] => {
1431
- // Make a new `Path` from `foo::Bar` to `Foo<Bar = RhsTy>`.
1432
- let mut assoc_path = full_path. clone ( ) ;
1433
- // Remove `Bar` from `Foo::Bar`.
1434
- assoc_path. segments . pop ( ) ;
1435
- let len = assoc_path. segments . len ( ) - 1 ;
1436
- let gen_args = args. as_deref ( ) . cloned ( ) ;
1437
- // Build `<Bar = RhsTy>`.
1438
- let arg = AngleBracketedArg :: Constraint ( AssocConstraint {
1439
- id : rustc_ast:: node_id:: DUMMY_NODE_ID ,
1440
- ident : * ident,
1441
- gen_args,
1442
- kind : AssocConstraintKind :: Equality {
1443
- term : predicate. rhs_ty . clone ( ) . into ( ) ,
1444
- } ,
1445
- span : ident. span ,
1446
- } ) ;
1447
- // Add `<Bar = RhsTy>` to `Foo`.
1448
- match & mut assoc_path. segments [ len] . args {
1449
- Some ( args) => match args. deref_mut ( ) {
1450
- GenericArgs :: Parenthesized ( _) => continue ,
1451
- GenericArgs :: AngleBracketed ( args) => {
1452
- args. args . push ( arg) ;
1453
- }
1454
- } ,
1455
- empty_args => {
1456
- * empty_args = Some (
1457
- AngleBracketedArgs {
1458
- span : ident. span ,
1459
- args : thin_vec ! [ arg] ,
1460
- }
1461
- . into ( ) ,
1462
- ) ;
1463
- }
1464
- }
1465
- err. assoc = Some ( errors:: AssociatedSuggestion {
1466
- span : predicate. span ,
1467
- ident : * ident,
1468
- param : * param,
1469
- path : pprust:: path_to_string ( & assoc_path) ,
1470
- } )
1471
- }
1472
- _ => { }
1473
- } ;
1422
+ if let TyKind :: Path ( Some ( qself) , full_path) = & predicate. lhs_ty . kind
1423
+ && let TyKind :: Path ( None , path) = & qself. ty . kind
1424
+ && let [ PathSegment { ident, args : None , .. } ] = & path. segments [ ..]
1425
+ {
1426
+ for param in & generics. params {
1427
+ if param. ident == * ident
1428
+ && let [ PathSegment { ident, args, .. } ] = & full_path. segments [ qself. position ..]
1429
+ {
1430
+ // Make a new `Path` from `foo::Bar` to `Foo<Bar = RhsTy>`.
1431
+ let mut assoc_path = full_path. clone ( ) ;
1432
+ // Remove `Bar` from `Foo::Bar`.
1433
+ assoc_path. segments . pop ( ) ;
1434
+ let len = assoc_path. segments . len ( ) - 1 ;
1435
+ let gen_args = args. as_deref ( ) . cloned ( ) ;
1436
+ // Build `<Bar = RhsTy>`.
1437
+ let arg = AngleBracketedArg :: Constraint ( AssocConstraint {
1438
+ id : rustc_ast:: node_id:: DUMMY_NODE_ID ,
1439
+ ident : * ident,
1440
+ gen_args,
1441
+ kind : AssocConstraintKind :: Equality {
1442
+ term : predicate. rhs_ty . clone ( ) . into ( ) ,
1443
+ } ,
1444
+ span : ident. span ,
1445
+ } ) ;
1446
+ // Add `<Bar = RhsTy>` to `Foo`.
1447
+ match & mut assoc_path. segments [ len] . args {
1448
+ Some ( args) => match args. deref_mut ( ) {
1449
+ GenericArgs :: Parenthesized ( _) => continue ,
1450
+ GenericArgs :: AngleBracketed ( args) => {
1451
+ args. args . push ( arg) ;
1474
1452
}
1453
+ } ,
1454
+ empty_args => {
1455
+ * empty_args = Some (
1456
+ AngleBracketedArgs {
1457
+ span : ident. span ,
1458
+ args : thin_vec ! [ arg] ,
1459
+ }
1460
+ . into ( ) ,
1461
+ ) ;
1475
1462
}
1476
1463
}
1477
- _ => { }
1464
+ err. assoc = Some ( errors:: AssociatedSuggestion {
1465
+ span : predicate. span ,
1466
+ ident : * ident,
1467
+ param : param. ident ,
1468
+ path : pprust:: path_to_string ( & assoc_path) ,
1469
+ } )
1478
1470
}
1479
1471
}
1480
1472
}
0 commit comments