@@ -1195,11 +1195,11 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
11951195 fn suggest_derive (
11961196 & self ,
11971197 err : & mut DiagnosticBuilder < ' _ > ,
1198- unsatisfied_predicates : & Vec < (
1198+ unsatisfied_predicates : & [ (
11991199 ty:: Predicate < ' tcx > ,
12001200 Option < ty:: Predicate < ' tcx > > ,
12011201 Option < ObligationCause < ' tcx > > ,
1202- ) > ,
1202+ ) ] ,
12031203 ) {
12041204 let mut derives = Vec :: < ( String , Span , String ) > :: new ( ) ;
12051205 let mut traits = Vec :: < Span > :: new ( ) ;
@@ -1236,23 +1236,24 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
12361236 traits. push ( self . tcx . def_span ( trait_pred. def_id ( ) ) ) ;
12371237 }
12381238 }
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- ) ;
12531239 traits. sort ( ) ;
12541240 traits. dedup ( ) ;
12551241
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+
12561257 let len = traits. len ( ) ;
12571258 if len > 0 {
12581259 let span: MultiSpan = traits. into ( ) ;
0 commit comments