@@ -141,6 +141,7 @@ crate fn placeholder_type_error(
141141 generics : & [ hir:: GenericParam < ' _ > ] ,
142142 placeholder_types : Vec < Span > ,
143143 suggest : bool ,
144+ is_fn : bool ,
144145) {
145146 if placeholder_types. is_empty ( ) {
146147 return ;
@@ -171,7 +172,9 @@ crate fn placeholder_type_error(
171172 }
172173
173174 let mut err = bad_placeholder_type ( tcx, placeholder_types) ;
174- if suggest {
175+
176+ // Suggest, but only if it is not a function
177+ if suggest && !is_fn {
175178 err. multipart_suggestion (
176179 "use type parameters instead" ,
177180 sugg,
@@ -198,7 +201,14 @@ fn reject_placeholder_type_signatures_in_item(tcx: TyCtxt<'tcx>, item: &'tcx hir
198201 let mut visitor = PlaceholderHirTyCollector :: default ( ) ;
199202 visitor. visit_item ( item) ;
200203
201- placeholder_type_error ( tcx, Some ( generics. span ) , & generics. params [ ..] , visitor. 0 , suggest) ;
204+ placeholder_type_error (
205+ tcx,
206+ Some ( generics. span ) ,
207+ & generics. params [ ..] ,
208+ visitor. 0 ,
209+ suggest,
210+ false
211+ ) ;
202212}
203213
204214impl Visitor < ' tcx > for CollectItemTypesVisitor < ' tcx > {
@@ -743,7 +753,7 @@ fn convert_trait_item(tcx: TyCtxt<'_>, trait_item_id: hir::HirId) {
743753 // Account for `const C: _;`.
744754 let mut visitor = PlaceholderHirTyCollector :: default ( ) ;
745755 visitor. visit_trait_item ( trait_item) ;
746- placeholder_type_error ( tcx, None , & [ ] , visitor. 0 , false ) ;
756+ placeholder_type_error ( tcx, None , & [ ] , visitor. 0 , false , false ) ;
747757 }
748758
749759 hir:: TraitItemKind :: Type ( _, Some ( _) ) => {
@@ -752,7 +762,7 @@ fn convert_trait_item(tcx: TyCtxt<'_>, trait_item_id: hir::HirId) {
752762 // Account for `type T = _;`.
753763 let mut visitor = PlaceholderHirTyCollector :: default ( ) ;
754764 visitor. visit_trait_item ( trait_item) ;
755- placeholder_type_error ( tcx, None , & [ ] , visitor. 0 , false ) ;
765+ placeholder_type_error ( tcx, None , & [ ] , visitor. 0 , false , false ) ;
756766 }
757767
758768 hir:: TraitItemKind :: Type ( _, None ) => {
@@ -761,7 +771,7 @@ fn convert_trait_item(tcx: TyCtxt<'_>, trait_item_id: hir::HirId) {
761771 // even if there is no concrete type.
762772 let mut visitor = PlaceholderHirTyCollector :: default ( ) ;
763773 visitor. visit_trait_item ( trait_item) ;
764- placeholder_type_error ( tcx, None , & [ ] , visitor. 0 , false ) ;
774+ placeholder_type_error ( tcx, None , & [ ] , visitor. 0 , false , false ) ;
765775 }
766776 } ;
767777
@@ -782,7 +792,7 @@ fn convert_impl_item(tcx: TyCtxt<'_>, impl_item_id: hir::HirId) {
782792 // Account for `type T = _;`
783793 let mut visitor = PlaceholderHirTyCollector :: default ( ) ;
784794 visitor. visit_impl_item ( impl_item) ;
785- placeholder_type_error ( tcx, None , & [ ] , visitor. 0 , false ) ;
795+ placeholder_type_error ( tcx, None , & [ ] , visitor. 0 , false , false ) ;
786796 }
787797 hir:: ImplItemKind :: Const ( ..) => { }
788798 }
0 commit comments