1
Fork 0

Rollup merge of #138998 - rperier:donot_suggest_to_use_impl_trait_in_closure_params, r=Noratrieb

Don't suggest the use of  `impl Trait` in closure parameter

Fixes #138932
This commit is contained in:
Stuart Cook 2025-04-11 13:31:46 +10:00 committed by GitHub
commit 573ebf011e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 38 additions and 6 deletions

View file

@ -3018,12 +3018,23 @@ impl<'a, 'tcx> TypeErrCtxt<'a, 'tcx> {
[] => span_bug!(ty.span, "trait object with no traits: {ty:?}"),
};
let needs_parens = traits.len() != 1;
err.span_suggestion_verbose(
span,
"you can use `impl Trait` as the argument type",
"impl ",
Applicability::MaybeIncorrect,
);
// Don't recommend impl Trait as a closure argument
if let Some(hir_id) = hir_id
&& matches!(
self.tcx.parent_hir_node(hir_id),
hir::Node::Item(hir::Item {
kind: hir::ItemKind::Fn { .. },
..
})
)
{
err.span_suggestion_verbose(
span,
"you can use `impl Trait` as the argument type",
"impl ",
Applicability::MaybeIncorrect,
);
}
let sugg = if !needs_parens {
vec![(span.shrink_to_lo(), format!("&{kw}"))]
} else {