@@ -1195,11 +1195,11 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
1195
1195
fn suggest_derive (
1196
1196
& self ,
1197
1197
err : & mut DiagnosticBuilder < ' _ > ,
1198
- unsatisfied_predicates : & Vec < (
1198
+ unsatisfied_predicates : & [ (
1199
1199
ty:: Predicate < ' tcx > ,
1200
1200
Option < ty:: Predicate < ' tcx > > ,
1201
1201
Option < ObligationCause < ' tcx > > ,
1202
- ) > ,
1202
+ ) ] ,
1203
1203
) {
1204
1204
let mut derives = Vec :: < ( String , Span , String ) > :: new ( ) ;
1205
1205
let mut traits = Vec :: < Span > :: new ( ) ;
@@ -1236,23 +1236,24 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
1236
1236
traits. push ( self . tcx . def_span ( trait_pred. def_id ( ) ) ) ;
1237
1237
}
1238
1238
}
1239
- derives. sort ( ) ;
1240
- let derives_grouped = derives. into_iter ( ) . fold (
1241
- Vec :: < ( String , Span , String ) > :: new ( ) ,
1242
- |mut acc, ( self_name, self_span, trait_name) | {
1243
- if let Some ( ( acc_self_name, _, ref mut traits) ) = acc. last_mut ( ) {
1244
- if acc_self_name == & self_name {
1245
- traits. push_str ( format ! ( ", {}" , trait_name) . as_str ( ) ) ;
1246
- return acc;
1247
- }
1248
- }
1249
- acc. push ( ( self_name, self_span, trait_name) ) ;
1250
- acc
1251
- } ,
1252
- ) ;
1253
1239
traits. sort ( ) ;
1254
1240
traits. dedup ( ) ;
1255
1241
1242
+ derives. sort ( ) ;
1243
+ derives. dedup ( ) ;
1244
+
1245
+ let mut derives_grouped = Vec :: < ( String , Span , String ) > :: new ( ) ;
1246
+ for ( self_name, self_span, trait_name) in derives. into_iter ( ) {
1247
+ if let Some ( ( last_self_name, _, ref mut last_trait_names) ) = derives_grouped. last_mut ( )
1248
+ {
1249
+ if last_self_name == & self_name {
1250
+ last_trait_names. push_str ( format ! ( ", {}" , trait_name) . as_str ( ) ) ;
1251
+ continue ;
1252
+ }
1253
+ }
1254
+ derives_grouped. push ( ( self_name, self_span, trait_name) ) ;
1255
+ }
1256
+
1256
1257
let len = traits. len ( ) ;
1257
1258
if len > 0 {
1258
1259
let span: MultiSpan = traits. into ( ) ;
0 commit comments