rust-lang / rust

Empowering everyone to build reliable and efficient software.
https://www.rust-lang.org
Other
93.93k stars 12.09k forks source link

Allow printing `TraitRef` and `TraitPredicate` with `Infcx` information #125262

Open BoxyUwU opened 2 weeks ago

BoxyUwU commented 2 weeks ago

This PR is a bit of a mess apologies. I've tried to split up into two commits.

The first commit makes the Infcx in WithInfcx be stored inside of an Option and makes NoInfcx into an uninhabited type so that we do not have a type that is not anything like an Infcx implement the InferCtxtLike trait and then get constructed and passed to places that expect an infcx. Generally the "leafs" of debug printing do not share codepaths for printing with or without an infcx and so need to be able to determine which to use.

While updating the leaves to match on the Option I changed the debug printing of inference variables to be ?0_..t for when we cant probe the variable ?0 instead of "silently" downgrading to normal Debug printing. I'm not sure how valuable this is but it was easy to do and given how many places accidentally are not going through the DebugWithInfcx trait it seems valuable to be able to tell in logs if an inference variable is being printed through the wrong trait or just doesnt have a universe available.

As an example of not going through the right trait, it seems like the Ty: DebugWithInfcx impl just.... did not actually pass through to TyKind: DebugWithInfcx and so would not ever print out the universes ^^' fixed that in this commit too.

The second commit actually introduces the DebugWithInfcx implementations for TraitRef and TraitPredicate. Previously TraitPredicate was formatted as: TraitPredicate(<T as Trait<U>>, polarity::Positive) and now it is (T: Trait<U>). This should hopefully make reading debug logs involving lots of trait bounds easier (and it'll get a lot better with custom Binder Debug impls) TraitRef's formatting has not really changed. Previously it was <T as Trait<U>> and now it is (T as Trait<U>).

r? @compiler-errors

bors commented 2 weeks ago

:umbrella: The latest upstream changes (presumably #125230) made this pull request unmergeable. Please resolve the merge conflicts.

bors commented 1 week ago

:umbrella: The latest upstream changes (presumably #125284) made this pull request unmergeable. Please resolve the merge conflicts.