Try to reword placeholder error messages to make them clearer
This commit is contained in:
parent
823c888be2
commit
55389f9171
1 changed files with 45 additions and 31 deletions
|
@ -246,7 +246,9 @@ impl NiceRegionError<'me, 'gcx, 'tcx> {
|
||||||
let mut counter = 0;
|
let mut counter = 0;
|
||||||
let mut has_sub = None;
|
let mut has_sub = None;
|
||||||
let mut has_sup = None;
|
let mut has_sup = None;
|
||||||
let mut has_vid = None;
|
|
||||||
|
let mut actual_has_vid = None;
|
||||||
|
let mut expected_has_vid = None;
|
||||||
|
|
||||||
self.tcx().for_each_free_region(&expected_trait_ref, |r| {
|
self.tcx().for_each_free_region(&expected_trait_ref, |r| {
|
||||||
if Some(r) == sub_placeholder && has_sub.is_none() {
|
if Some(r) == sub_placeholder && has_sub.is_none() {
|
||||||
|
@ -256,11 +258,16 @@ impl NiceRegionError<'me, 'gcx, 'tcx> {
|
||||||
has_sup = Some(counter);
|
has_sup = Some(counter);
|
||||||
counter += 1;
|
counter += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if Some(r) == vid && expected_has_vid.is_none() {
|
||||||
|
expected_has_vid = Some(counter);
|
||||||
|
counter += 1;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
self.tcx().for_each_free_region(&actual_trait_ref, |r| {
|
self.tcx().for_each_free_region(&actual_trait_ref, |r| {
|
||||||
if Some(r) == vid && has_vid.is_none() {
|
if Some(r) == vid && actual_has_vid.is_none() {
|
||||||
has_vid = Some(counter);
|
actual_has_vid = Some(counter);
|
||||||
counter += 1;
|
counter += 1;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -274,60 +281,67 @@ impl NiceRegionError<'me, 'gcx, 'tcx> {
|
||||||
match (has_sub, has_sup) {
|
match (has_sub, has_sup) {
|
||||||
(Some(n1), Some(n2)) => {
|
(Some(n1), Some(n2)) => {
|
||||||
err.note(&format!(
|
err.note(&format!(
|
||||||
"`{}` must implement `{}` \
|
"`{}` would have to be implemented for the type `{}`, \
|
||||||
for any two lifetimes `'{}` and `'{}`",
|
for any two lifetimes `'{}` and `'{}`",
|
||||||
expected_trait_ref.self_ty(),
|
|
||||||
expected_trait_ref,
|
expected_trait_ref,
|
||||||
|
expected_trait_ref.self_ty(),
|
||||||
std::cmp::min(n1, n2),
|
std::cmp::min(n1, n2),
|
||||||
std::cmp::max(n1, n2),
|
std::cmp::max(n1, n2),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
(Some(n), _) | (_, Some(n)) => {
|
(Some(n), _) | (_, Some(n)) => {
|
||||||
err.note(&format!(
|
err.note(&format!(
|
||||||
"`{}` must implement `{}` \
|
"`{}` would have to be implemented for the type `{}`, \
|
||||||
for any lifetime `'{}`",
|
for any lifetime `'{}`",
|
||||||
expected_trait_ref.self_ty(),
|
|
||||||
expected_trait_ref,
|
expected_trait_ref,
|
||||||
|
expected_trait_ref.self_ty(),
|
||||||
n,
|
n,
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
(None, None) => {
|
(None, None) => {
|
||||||
err.note(&format!(
|
err.note(&format!(
|
||||||
"`{}` must implement `{}`",
|
"`{}` would have to be implemented for the type `{}`",
|
||||||
expected_trait_ref.self_ty(),
|
|
||||||
expected_trait_ref,
|
expected_trait_ref,
|
||||||
|
expected_trait_ref.self_ty(),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
RegionHighlightMode::maybe_highlighting_region(vid, has_vid, || match has_vid {
|
RegionHighlightMode::maybe_highlighting_region(
|
||||||
Some(n) => {
|
vid,
|
||||||
if self_ty_has_vid {
|
actual_has_vid.or(expected_has_vid),
|
||||||
|
|| match actual_has_vid {
|
||||||
|
Some(n) => {
|
||||||
|
if self_ty_has_vid {
|
||||||
|
err.note(&format!(
|
||||||
|
"but `{}` is actually implemented for the type `{}`, \
|
||||||
|
for the specific lifetime `'{}`",
|
||||||
|
actual_trait_ref,
|
||||||
|
actual_trait_ref.self_ty(),
|
||||||
|
n
|
||||||
|
));
|
||||||
|
} else {
|
||||||
|
err.note(&format!(
|
||||||
|
"but `{}` is actually implemented for the type `{}`, \
|
||||||
|
for some lifetime `'{}`",
|
||||||
|
actual_trait_ref,
|
||||||
|
actual_trait_ref.self_ty(),
|
||||||
|
n
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_ => {
|
||||||
err.note(&format!(
|
err.note(&format!(
|
||||||
"but `{}` only implements `{}` for the lifetime `'{}`",
|
"but `{}` is actually implemented for the type `{}`",
|
||||||
actual_trait_ref.self_ty(),
|
|
||||||
actual_trait_ref,
|
actual_trait_ref,
|
||||||
n
|
|
||||||
));
|
|
||||||
} else {
|
|
||||||
err.note(&format!(
|
|
||||||
"but `{}` only implements `{}` for some lifetime `'{}`",
|
|
||||||
actual_trait_ref.self_ty(),
|
actual_trait_ref.self_ty(),
|
||||||
actual_trait_ref,
|
|
||||||
n
|
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
None => {
|
);
|
||||||
err.note(&format!(
|
|
||||||
"but `{}` only implements `{}`",
|
|
||||||
actual_trait_ref.self_ty(),
|
|
||||||
actual_trait_ref,
|
|
||||||
));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
err.emit();
|
err.emit();
|
||||||
ErrorReported
|
ErrorReported
|
||||||
|
|
Loading…
Reference in a new issue