@@ -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