generics: &[hir::GenericParam<'_>],
placeholder_types: Vec<Span>,
suggest: bool,
+ is_fn: bool,
) {
if placeholder_types.is_empty() {
return;
}
let mut err = bad_placeholder_type(tcx, placeholder_types);
- if suggest {
+
+ // Suggest, but only if it is not a function
+ if suggest && !is_fn {
err.multipart_suggestion(
"use type parameters instead",
sugg,
let mut visitor = PlaceholderHirTyCollector::default();
visitor.visit_item(item);
- placeholder_type_error(tcx, Some(generics.span), &generics.params[..], visitor.0, suggest);
+ placeholder_type_error(
+ tcx,
+ Some(generics.span),
+ &generics.params[..],
+ visitor.0,
+ suggest,
+ false
+ );
}
impl Visitor<'tcx> for CollectItemTypesVisitor<'tcx> {
// Account for `const C: _;`.
let mut visitor = PlaceholderHirTyCollector::default();
visitor.visit_trait_item(trait_item);
- placeholder_type_error(tcx, None, &[], visitor.0, false);
+ placeholder_type_error(tcx, None, &[], visitor.0, false, false);
}
hir::TraitItemKind::Type(_, Some(_)) => {
// Account for `type T = _;`.
let mut visitor = PlaceholderHirTyCollector::default();
visitor.visit_trait_item(trait_item);
- placeholder_type_error(tcx, None, &[], visitor.0, false);
+ placeholder_type_error(tcx, None, &[], visitor.0, false, false);
}
hir::TraitItemKind::Type(_, None) => {
// even if there is no concrete type.
let mut visitor = PlaceholderHirTyCollector::default();
visitor.visit_trait_item(trait_item);
- placeholder_type_error(tcx, None, &[], visitor.0, false);
+ placeholder_type_error(tcx, None, &[], visitor.0, false, false);
}
};
// Account for `type T = _;`
let mut visitor = PlaceholderHirTyCollector::default();
visitor.visit_impl_item(impl_item);
- placeholder_type_error(tcx, None, &[], visitor.0, false);
+ placeholder_type_error(tcx, None, &[], visitor.0, false, false);
}
hir::ImplItemKind::Const(..) => {}
}