@@ -129,20 +129,23 @@ struct CollectItemTypesVisitor<'tcx> {
129129/// all already existing generic type parameters to avoid suggesting a name that is already in use.
130130crate fn placeholder_type_error (
131131 tcx : TyCtxt < ' tcx > ,
132- span : Span ,
132+ span : Option < Span > ,
133133 generics : & [ hir:: GenericParam < ' _ > ] ,
134134 placeholder_types : Vec < Span > ,
135135 suggest : bool ,
136136) {
137137 if placeholder_types. is_empty ( ) {
138138 return ;
139139 }
140- let type_name = generics. next_type_param_name ( None ) ;
141140
141+ let type_name = generics. next_type_param_name ( None ) ;
142142 let mut sugg: Vec < _ > =
143143 placeholder_types. iter ( ) . map ( |sp| ( * sp, ( * type_name) . to_string ( ) ) ) . collect ( ) ;
144+
144145 if generics. is_empty ( ) {
145- sugg. push ( ( span, format ! ( "<{}>" , type_name) ) ) ;
146+ if let Some ( span) = span {
147+ sugg. push ( ( span, format ! ( "<{}>" , type_name) ) ) ;
148+ }
146149 } else if let Some ( arg) = generics. iter ( ) . find ( |arg| match arg. name {
147150 hir:: ParamName :: Plain ( Ident { name : kw:: Underscore , .. } ) => true ,
148151 _ => false ,
@@ -158,6 +161,7 @@ crate fn placeholder_type_error(
158161 format ! ( ", {}" , type_name) ,
159162 ) ) ;
160163 }
164+
161165 let mut err = bad_placeholder_type ( tcx, placeholder_types) ;
162166 if suggest {
163167 err. multipart_suggestion (
@@ -186,7 +190,7 @@ fn reject_placeholder_type_signatures_in_item(tcx: TyCtxt<'tcx>, item: &'tcx hir
186190 let mut visitor = PlaceholderHirTyCollector :: default ( ) ;
187191 visitor. visit_item ( item) ;
188192
189- placeholder_type_error ( tcx, generics. span , & generics. params [ ..] , visitor. 0 , suggest) ;
193+ placeholder_type_error ( tcx, Some ( generics. span ) , & generics. params [ ..] , visitor. 0 , suggest) ;
190194}
191195
192196impl Visitor < ' tcx > for CollectItemTypesVisitor < ' tcx > {
@@ -722,7 +726,7 @@ fn convert_trait_item(tcx: TyCtxt<'_>, trait_item_id: hir::HirId) {
722726 // Account for `const C: _;` and `type T = _;`.
723727 let mut visitor = PlaceholderHirTyCollector :: default ( ) ;
724728 visitor. visit_trait_item ( trait_item) ;
725- placeholder_type_error ( tcx, DUMMY_SP , & [ ] , visitor. 0 , false ) ;
729+ placeholder_type_error ( tcx, None , & [ ] , visitor. 0 , false ) ;
726730 }
727731
728732 hir:: TraitItemKind :: Type ( _, None ) => { }
@@ -745,7 +749,7 @@ fn convert_impl_item(tcx: TyCtxt<'_>, impl_item_id: hir::HirId) {
745749 // Account for `type T = _;`
746750 let mut visitor = PlaceholderHirTyCollector :: default ( ) ;
747751 visitor. visit_impl_item ( impl_item) ;
748- placeholder_type_error ( tcx, DUMMY_SP , & [ ] , visitor. 0 , false ) ;
752+ placeholder_type_error ( tcx, None , & [ ] , visitor. 0 , false ) ;
749753 }
750754 hir:: ImplItemKind :: Const ( ..) => { }
751755 }
0 commit comments