Point at assoc fn definition on type param divergence
When the number of type parameters in the associated function of an impl and its trait differ, we now *always* point at the trait one, even if it comes from a foreign crate. When it is local, we point at the specific params, when it is foreign, we point at the whole associated item. Fix #69944.
This commit is contained in:
parent
cc705b8012
commit
939a224ce3
@ -1557,38 +1557,24 @@ fn compare_number_of_generics<'tcx>(
|
||||
DiagnosticId::Error("E0049".into()),
|
||||
);
|
||||
|
||||
let mut suffix = None;
|
||||
|
||||
let msg =
|
||||
format!("expected {trait_count} {kind} parameter{}", pluralize!(trait_count),);
|
||||
if let Some(spans) = trait_spans {
|
||||
let mut spans = spans.iter();
|
||||
if let Some(span) = spans.next() {
|
||||
err.span_label(
|
||||
*span,
|
||||
format!(
|
||||
"expected {} {} parameter{}",
|
||||
trait_count,
|
||||
kind,
|
||||
pluralize!(trait_count),
|
||||
),
|
||||
);
|
||||
err.span_label(*span, msg);
|
||||
}
|
||||
for span in spans {
|
||||
err.span_label(*span, "");
|
||||
}
|
||||
} else {
|
||||
suffix = Some(format!(", expected {trait_count}"));
|
||||
err.span_label(tcx.def_span(trait_.def_id), msg);
|
||||
}
|
||||
|
||||
if let Some(span) = span {
|
||||
err.span_label(
|
||||
span,
|
||||
format!(
|
||||
"found {} {} parameter{}{}",
|
||||
impl_count,
|
||||
kind,
|
||||
pluralize!(impl_count),
|
||||
suffix.unwrap_or_default(),
|
||||
),
|
||||
format!("found {} {} parameter{}", impl_count, kind, pluralize!(impl_count),),
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -2,7 +2,12 @@ error[E0049]: method `foo` has 1 type parameter but its trait declaration has 0
|
||||
--> $DIR/issue-36708.rs:8:12
|
||||
|
|
||||
LL | fn foo<T>() {}
|
||||
| ^ found 1 type parameter, expected 0
|
||||
| ^ found 1 type parameter
|
||||
|
|
||||
::: $DIR/auxiliary/issue-36708.rs:4:5
|
||||
|
|
||||
LL | fn foo();
|
||||
| --------- expected 0 type parameters
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user