Show bound lifetimes when comparing types in diagnostics
This commit is contained in:
parent
5d52c0e0c6
commit
842f0590db
2 changed files with 15 additions and 4 deletions
|
@ -1191,16 +1191,26 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> {
|
||||||
// | |
|
// | |
|
||||||
// | elided as they were the same
|
// | elided as they were the same
|
||||||
// not elided, they were different, but irrelevant
|
// not elided, they were different, but irrelevant
|
||||||
|
//
|
||||||
|
// For bound lifetimes, keep the names of the lifetimes,
|
||||||
|
// even if they are the same so that it's clear what's happening
|
||||||
|
// if we have something like
|
||||||
|
//
|
||||||
|
// for<'r, 's> fn(Inv<'r>, Inv<'s>)
|
||||||
|
// for<'r> fn(Inv<'r>, Inv<'r>)
|
||||||
let lifetimes = sub1.regions().zip(sub2.regions());
|
let lifetimes = sub1.regions().zip(sub2.regions());
|
||||||
for (i, lifetimes) in lifetimes.enumerate() {
|
for (i, lifetimes) in lifetimes.enumerate() {
|
||||||
let l1 = lifetime_display(lifetimes.0);
|
let l1 = lifetime_display(lifetimes.0);
|
||||||
let l2 = lifetime_display(lifetimes.1);
|
let l2 = lifetime_display(lifetimes.1);
|
||||||
if lifetimes.0 == lifetimes.1 {
|
if lifetimes.0 != lifetimes.1 {
|
||||||
values.0.push_normal("'_");
|
|
||||||
values.1.push_normal("'_");
|
|
||||||
} else {
|
|
||||||
values.0.push_highlighted(l1);
|
values.0.push_highlighted(l1);
|
||||||
values.1.push_highlighted(l2);
|
values.1.push_highlighted(l2);
|
||||||
|
} else if lifetimes.0.is_late_bound() {
|
||||||
|
values.0.push_normal(l1);
|
||||||
|
values.1.push_normal(l2);
|
||||||
|
} else {
|
||||||
|
values.0.push_normal("'_");
|
||||||
|
values.1.push_normal("'_");
|
||||||
}
|
}
|
||||||
self.push_comma(&mut values.0, &mut values.1, len, i);
|
self.push_comma(&mut values.0, &mut values.1, len, i);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
pub use self::freshen::TypeFreshener;
|
pub use self::freshen::TypeFreshener;
|
||||||
|
pub use self::lexical_region_resolve::RegionResolutionError;
|
||||||
pub use self::LateBoundRegionConversionTime::*;
|
pub use self::LateBoundRegionConversionTime::*;
|
||||||
pub use self::RegionVariableOrigin::*;
|
pub use self::RegionVariableOrigin::*;
|
||||||
pub use self::SubregionOrigin::*;
|
pub use self::SubregionOrigin::*;
|
||||||
|
|
Loading…
Add table
Reference in a new issue