@@ -509,44 +509,23 @@ impl<'a, 'tcx> WrongNumberOfGenericArgs<'a, 'tcx> {
509509 }
510510
511511 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 )
533514 } 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 ) ;
550529 }
551530 AngleBrackets :: Implied => {
552531 // We never encounter missing lifetimes in situations in which lifetimes are elided
0 commit comments