@@ -141,6 +141,7 @@ crate fn placeholder_type_error(
141
141
generics : & [ hir:: GenericParam < ' _ > ] ,
142
142
placeholder_types : Vec < Span > ,
143
143
suggest : bool ,
144
+ is_fn : bool ,
144
145
) {
145
146
if placeholder_types. is_empty ( ) {
146
147
return ;
@@ -171,7 +172,9 @@ crate fn placeholder_type_error(
171
172
}
172
173
173
174
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 {
175
178
err. multipart_suggestion (
176
179
"use type parameters instead" ,
177
180
sugg,
@@ -198,7 +201,14 @@ fn reject_placeholder_type_signatures_in_item(tcx: TyCtxt<'tcx>, item: &'tcx hir
198
201
let mut visitor = PlaceholderHirTyCollector :: default ( ) ;
199
202
visitor. visit_item ( item) ;
200
203
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
+ ) ;
202
212
}
203
213
204
214
impl Visitor < ' tcx > for CollectItemTypesVisitor < ' tcx > {
@@ -743,7 +753,7 @@ fn convert_trait_item(tcx: TyCtxt<'_>, trait_item_id: hir::HirId) {
743
753
// Account for `const C: _;`.
744
754
let mut visitor = PlaceholderHirTyCollector :: default ( ) ;
745
755
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 ) ;
747
757
}
748
758
749
759
hir:: TraitItemKind :: Type ( _, Some ( _) ) => {
@@ -752,7 +762,7 @@ fn convert_trait_item(tcx: TyCtxt<'_>, trait_item_id: hir::HirId) {
752
762
// Account for `type T = _;`.
753
763
let mut visitor = PlaceholderHirTyCollector :: default ( ) ;
754
764
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 ) ;
756
766
}
757
767
758
768
hir:: TraitItemKind :: Type ( _, None ) => {
@@ -761,7 +771,7 @@ fn convert_trait_item(tcx: TyCtxt<'_>, trait_item_id: hir::HirId) {
761
771
// even if there is no concrete type.
762
772
let mut visitor = PlaceholderHirTyCollector :: default ( ) ;
763
773
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 ) ;
765
775
}
766
776
} ;
767
777
@@ -782,7 +792,7 @@ fn convert_impl_item(tcx: TyCtxt<'_>, impl_item_id: hir::HirId) {
782
792
// Account for `type T = _;`
783
793
let mut visitor = PlaceholderHirTyCollector :: default ( ) ;
784
794
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 ) ;
786
796
}
787
797
hir:: ImplItemKind :: Const ( ..) => { }
788
798
}
0 commit comments