Suggest the use of impl Trait
in function parameter only
Currently in case of a Trait object in closure parameter, the compiler suggests either to use a reference, which is correct or to use an `impl Trait` which is not. Do not emit this suggestion when the parameter is part of a closure.
This commit is contained in:
parent
c1b8b7e86f
commit
8b6ff4a378
3 changed files with 38 additions and 6 deletions
|
@ -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 {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue