@@ -509,44 +509,23 @@ impl<'a, 'tcx> WrongNumberOfGenericArgs<'a, 'tcx> {
509
509
}
510
510
511
511
AngleBrackets :: Available => {
512
- // angle brackets exist, so we insert missing arguments after the existing args
513
-
514
- assert ! ( !self . gen_args. args. is_empty( ) ) ;
515
-
516
- if self . num_provided_lifetime_args ( ) > 0 {
517
- let last_lt_arg_span = self . gen_args . args
518
- [ self . num_provided_lifetime_args ( ) - 1 ]
519
- . span ( )
520
- . shrink_to_hi ( ) ;
521
- let source_map = self . tcx . sess . source_map ( ) ;
522
-
523
- if let Ok ( last_gen_arg) = source_map. span_to_snippet ( last_lt_arg_span) {
524
- let sugg = format ! ( "{}, {}" , last_gen_arg, suggested_args) ;
525
-
526
- err. span_suggestion_verbose (
527
- last_lt_arg_span,
528
- & msg,
529
- sugg,
530
- Applicability :: HasPlaceholders ,
531
- ) ;
532
- }
512
+ let ( sugg_span, is_first) = if self . num_provided_lifetime_args ( ) == 0 {
513
+ ( self . gen_args . span ( ) . unwrap ( ) . shrink_to_lo ( ) , true )
533
514
} else {
534
- // Non-lifetime arguments included in `gen_args` -> insert missing lifetimes before
535
- // existing arguments
536
- let first_arg_span = self . gen_args . args [ 0 ] . span ( ) . shrink_to_lo ( ) ;
537
- let source_map = self . tcx . sess . source_map ( ) ;
538
-
539
- if let Ok ( first_gen_arg) = source_map. span_to_snippet ( first_arg_span) {
540
- let sugg = format ! ( "{}, {}" , suggested_args, first_gen_arg) ;
541
-
542
- err. span_suggestion_verbose (
543
- first_arg_span,
544
- & msg,
545
- sugg,
546
- Applicability :: HasPlaceholders ,
547
- ) ;
548
- }
549
- }
515
+ let last_lt = & self . gen_args . args [ self . num_provided_lifetime_args ( ) - 1 ] ;
516
+ ( last_lt. span ( ) . shrink_to_hi ( ) , false )
517
+ } ;
518
+ let has_non_lt_args = self . num_provided_type_or_const_args ( ) != 0 ;
519
+ let has_bindings = !self . gen_args . bindings . is_empty ( ) ;
520
+
521
+ let sugg_prefix = if is_first { "" } else { ", " } ;
522
+ let sugg_suffix =
523
+ if is_first && ( has_non_lt_args || has_bindings) { ", " } else { "" } ;
524
+
525
+ let sugg = format ! ( "{}{}{}" , sugg_prefix, suggested_args, sugg_suffix) ;
526
+ debug ! ( "sugg: {:?}" , sugg) ;
527
+
528
+ err. span_suggestion_verbose ( sugg_span, & msg, sugg, Applicability :: HasPlaceholders ) ;
550
529
}
551
530
AngleBrackets :: Implied => {
552
531
// We never encounter missing lifetimes in situations in which lifetimes are elided
0 commit comments