Suggest to take and ignore args while closure args count mismatching
This commit is contained in:
parent
c7cba3d33f
commit
87f0c1f337
@ -1048,7 +1048,24 @@ impl<'a, 'gcx, 'tcx> InferCtxt<'a, 'gcx, 'tcx> {
|
|||||||
err.span_label(span, format!( "expected {} that takes {}", kind, expected_str));
|
err.span_label(span, format!( "expected {} that takes {}", kind, expected_str));
|
||||||
|
|
||||||
if let Some(found_span) = found_span {
|
if let Some(found_span) = found_span {
|
||||||
err.span_label(found_span, format!("takes {}", found_str));
|
// Suggest to take and ignore the arguments with expected_args_length `_`s if
|
||||||
|
// found arguments is empty(Suppose the user just wants to ignore args in this case).
|
||||||
|
// like `|_, _|` for closure with 2 expected args.
|
||||||
|
if found_args.is_empty() && is_closure {
|
||||||
|
let mut underscores = "_".repeat(expected_args.len())
|
||||||
|
.split("")
|
||||||
|
.filter(|s| !s.is_empty())
|
||||||
|
.collect::<Vec<_>>()
|
||||||
|
.join(", ");
|
||||||
|
err.span_suggestion(
|
||||||
|
found_span,
|
||||||
|
"consider changing this to",
|
||||||
|
format!("|{}|", underscores),
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
err.span_label(found_span, format!("takes {}", found_str));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if let &[ArgKind::Tuple(_, ref fields)] = &found_args[..] {
|
if let &[ArgKind::Tuple(_, ref fields)] = &found_args[..] {
|
||||||
if fields.len() == expected_args.len() {
|
if fields.len() == expected_args.len() {
|
||||||
|
Loading…
Reference in New Issue
Block a user