Account for type alias projections in E0308 "expected/found" shortening logic#159189
Conversation
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment was marked as resolved.
This comment was marked as resolved.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
…ng logic
When encountering a E0308 error involving `ty::Projection`s, highlight only the sub-parts that are actually relevant:
```
error[E0308]: mismatched types
--> tests/ui/associated-types/long-type-E0308.rs:19:5
|
16 | fn foo<'a, T: FooBar>(value: T) -> <<<T::Wrapper<T> as FooBar>::Assoc as FooBar>::Assoc as FooBar>::Wrapper<<T::Assoc as FooBar>::Assoc> {
| ----------------------------------------------------------------------------------------------------- expected `<<<... as FooBar>::Assoc as FooBar>::Assoc as FooBar>::Wrapper<...>` because of return type
...
19 | value.assoc().assoc().assoc().wrap(value.assoc().assoc())
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `really_really_really_long_module::FooBar::Wrapper`, found `really_really_really_long_module::FooBar::Assoc`
|
= note: expected associated type `<<<<_ as FooBar>::Wrapper<T> as FooBar>::Assoc as FooBar>::Assoc as FooBar>::Wrapper<_>`
found associated type `<<<<_ as FooBar>::Assoc as FooBar>::Assoc as FooBar>::Assoc as FooBar>::Wrapper<_>`
= note: an associated type was expected, but a different one was found
= note: the full name for the type has been written to 'long-type-E0308.long-type-5396540309891820670.txt'
= note: consider using `--verbose` to print the full type name to the console
```
Deduplicate param highlighting logic.
Account for type param difference in trait in E0308 highlighting.
|
This PR was rebased onto a different main commit. Here's a range-diff highlighting what actually changed. Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers. |
|
No other issues except two trivial one. |
|
@bors r=chenyukang |
Account for type alias projections in E0308 "expected/found" shortening logic
When encountering a E0308 error involving `ty::Projection`s, highlight only the sub-parts that are actually relevant:
```
error[E0308]: mismatched types
--> tests/ui/associated-types/long-type-E0308.rs:19:5
|
16 | fn foo<'a, T: FooBar>(value: T) -> <<<T::Wrapper<T> as FooBar>::Assoc as FooBar>::Assoc as FooBar>::Wrapper<<T::Assoc as FooBar>::Assoc> {
| ----------------------------------------------------------------------------------------------------- expected `<<<... as FooBar>::Assoc as FooBar>::Assoc as FooBar>::Wrapper<...>` because of return type
...
19 | value.assoc().assoc().assoc().wrap(value.assoc().assoc())
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `really_really_really_long_module::FooBar::Wrapper`, found `really_really_really_long_module::FooBar::Assoc`
|
= note: expected associated type `<<<<_ as FooBar>::Wrapper<T> as FooBar>::Assoc as FooBar>::Assoc as FooBar>::Wrapper<_>`
found associated type `<<<<_ as FooBar>::Assoc as FooBar>::Assoc as FooBar>::Assoc as FooBar>::Wrapper<_>`
= note: an associated type was expected, but a different one was found
= note: the full name for the type has been written to 'long-type-E0308.long-type-5396540309891820670.txt'
= note: consider using `--verbose` to print the full type name to the console
```
Fix rust-lang#159043, by including a textual type shortening logic that operates on the highlighted text on really narrow terminals:
```
error[E0308]: mismatched types
--> $DIR/long-type-E0308.rs:30:5
|
LL | ) -> <
| ______-
LL | | <
LL | | <T::Wrapper<T> as FooBar>::Assoc as FooBar
LL | | >::Assoc as FooBar
LL | | >::Wrapper<<T::Assoc as FooBar>::Assoc>
| |_______________________________________- expected `<_ as FooBar>::Wrapper<_>` because of return type
...
LL | value...oc())
| ^^^^^...^^^^^ expected `really_really_really_long_module::FooBar::Wrapper`, found `really_really_really_long_module::FooBar::Assoc`
|
= note: expected associated type `<<<<_ as FooBar>::Wrapper<_> as...pper<_>`
found associated type `<<<<_ as FooBar>::Assoc as Fo...pper<_>`
= note: an associated type was expected, but a different one was found
= note: the full name for the type has been written to '$TEST_BUILD_DIR/long-type-E0308.long-type-$LONG_TYPE_HASH.txt'
= note: consider using `--verbose` to print the full type name to the console
```
r? @chenyukang
…uwer Rollup of 5 pull requests Successful merges: - #159189 (Account for type alias projections in E0308 "expected/found" shortening logic) - #158545 (Move `std::io::read_to_string` to `alloc::io`) - #159328 (tests/assembly-llvm: pin frame pointer in issue-141649 aarch64 test) - #159470 (Fix string indexing in diagnostic format strings) - #159500 (Move compiletest CLI parsing to `cli.rs`)
This comment has been minimized.
This comment has been minimized.
Account for type alias projections in E0308 "expected/found" shortening logic
When encountering a E0308 error involving `ty::Projection`s, highlight only the sub-parts that are actually relevant:
```
error[E0308]: mismatched types
--> tests/ui/associated-types/long-type-E0308.rs:19:5
|
16 | fn foo<'a, T: FooBar>(value: T) -> <<<T::Wrapper<T> as FooBar>::Assoc as FooBar>::Assoc as FooBar>::Wrapper<<T::Assoc as FooBar>::Assoc> {
| ----------------------------------------------------------------------------------------------------- expected `<<<... as FooBar>::Assoc as FooBar>::Assoc as FooBar>::Wrapper<...>` because of return type
...
19 | value.assoc().assoc().assoc().wrap(value.assoc().assoc())
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `really_really_really_long_module::FooBar::Wrapper`, found `really_really_really_long_module::FooBar::Assoc`
|
= note: expected associated type `<<<<_ as FooBar>::Wrapper<T> as FooBar>::Assoc as FooBar>::Assoc as FooBar>::Wrapper<_>`
found associated type `<<<<_ as FooBar>::Assoc as FooBar>::Assoc as FooBar>::Assoc as FooBar>::Wrapper<_>`
= note: an associated type was expected, but a different one was found
= note: the full name for the type has been written to 'long-type-E0308.long-type-5396540309891820670.txt'
= note: consider using `--verbose` to print the full type name to the console
```
Fix #159043, by including a textual type shortening logic that operates on the highlighted text on really narrow terminals:
```
error[E0308]: mismatched types
--> $DIR/long-type-E0308.rs:30:5
|
LL | ) -> <
| ______-
LL | | <
LL | | <T::Wrapper<T> as FooBar>::Assoc as FooBar
LL | | >::Assoc as FooBar
LL | | >::Wrapper<<T::Assoc as FooBar>::Assoc>
| |_______________________________________- expected `<_ as FooBar>::Wrapper<_>` because of return type
...
LL | value...oc())
| ^^^^^...^^^^^ expected `really_really_really_long_module::FooBar::Wrapper`, found `really_really_really_long_module::FooBar::Assoc`
|
= note: expected associated type `<<<<_ as FooBar>::Wrapper<_> as...pper<_>`
found associated type `<<<<_ as FooBar>::Assoc as Fo...pper<_>`
= note: an associated type was expected, but a different one was found
= note: the full name for the type has been written to '$TEST_BUILD_DIR/long-type-E0308.long-type-$LONG_TYPE_HASH.txt'
= note: consider using `--verbose` to print the full type name to the console
```
r? @chenyukang
This comment has been minimized.
This comment has been minimized.
|
💔 Test for b356d7c failed: CI. Failed job:
|
|
💔 I suspect this PR failed tests as part of a rollup After fixing the problem, consider running a try job for the failed job before re-approving. Link to failure: #159501 (comment) |
|
This PR was contained in a rollup (#159501), which was unapproved. |
|
ah, I got it, you need add these files for windows: but if you don't have a windows dev machine, seems it's not easy to generate them 😅 |
…e highlighted string instead
Introduce a mechanism to textually trim highlighted strings, so that we can print out "expected/found" note with shorter output while still keeping the highlighted inner parts.
```
error[E0308]: mismatched types
--> $DIR/long-type-E0308.rs:30:5
|
LL | ) -> <
| ______-
LL | | <
LL | | <T::Wrapper<T> as FooBar>::Assoc as FooBar
LL | | >::Assoc as FooBar
LL | | >::Wrapper<<T::Assoc as FooBar>::Assoc>
| |_______________________________________- expected `<_ as FooBar>::Wrapper<_>` because of return type
...
LL | value...oc())
| ^^^^^...^^^^^ expected `really_really_really_long_module::FooBar::Wrapper`, found `really_really_really_long_module::FooBar::Assoc`
|
= note: expected associated type `<<<<_ as FooBar>::Wrapper<_> as...pper<_>`
found associated type `<<<<_ as FooBar>::Assoc as Fo...pper<_>`
= note: an associated type was expected, but a different one was found
= note: the full name for the type has been written to '$TEST_BUILD_DIR/long-type-E0308.long-type-$LONG_TYPE_HASH.txt'
= note: consider using `--verbose` to print the full type name to the console
```
|
@bors r=chenyukang Restricted the color tests to linux-only. The textual ones still happen everywhere. |
…uwer Rollup of 18 pull requests Successful merges: - #159600 (`rust-analyzer` subtree update) - #158046 (proc_macro: preserve file module spans for inner attrs) - #159000 (Small cleanups to the incr comp session code) - #159189 (Account for type alias projections in E0308 "expected/found" shortening logic) - #159449 (Enable single Location to issue multiple borrows) - #159544 (Suggest valid command-line crate names) - #159587 (Improve `AttrItem::span`) - #159594 (feat(rustc_hir_typeck): suggest `impl Fn` return for capturing closures) - #159597 (std: use `arc4random_buf` from libc) - #159599 (Resolver: Record at least 1 ambiguous trait if main decl is not a trait.) - #158061 (Make `pin!()` more foolproof.) - #159460 (Do not mark unnormalized const aliases as rigid when normalizing param env) - #159529 (Add regression test for nested replacement ranges in `collect_tokens`) - #159571 (Remove unused bundled library lookup for the local crate) - #159585 (Minor `TokenStream` improvements) - #159586 (Separate `InterpCx` usage by `ConstAnalysis` phases) - #159602 (Remove `ItemLike`) - #159603 (Clarify `push_stream`/`push_tree`) Failed merges: - #159590 (Remove some dead code)
Rollup merge of #159189 - estebank:issue-159043, r=chenyukang Account for type alias projections in E0308 "expected/found" shortening logic When encountering a E0308 error involving `ty::Projection`s, highlight only the sub-parts that are actually relevant: ``` error[E0308]: mismatched types --> tests/ui/associated-types/long-type-E0308.rs:19:5 | 16 | fn foo<'a, T: FooBar>(value: T) -> <<<T::Wrapper<T> as FooBar>::Assoc as FooBar>::Assoc as FooBar>::Wrapper<<T::Assoc as FooBar>::Assoc> { | ----------------------------------------------------------------------------------------------------- expected `<<<... as FooBar>::Assoc as FooBar>::Assoc as FooBar>::Wrapper<...>` because of return type ... 19 | value.assoc().assoc().assoc().wrap(value.assoc().assoc()) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `really_really_really_long_module::FooBar::Wrapper`, found `really_really_really_long_module::FooBar::Assoc` | = note: expected associated type `<<<<_ as FooBar>::Wrapper<T> as FooBar>::Assoc as FooBar>::Assoc as FooBar>::Wrapper<_>` found associated type `<<<<_ as FooBar>::Assoc as FooBar>::Assoc as FooBar>::Assoc as FooBar>::Wrapper<_>` = note: an associated type was expected, but a different one was found = note: the full name for the type has been written to 'long-type-E0308.long-type-5396540309891820670.txt' = note: consider using `--verbose` to print the full type name to the console ``` Fix #159043, by including a textual type shortening logic that operates on the highlighted text on really narrow terminals: ``` error[E0308]: mismatched types --> $DIR/long-type-E0308.rs:30:5 | LL | ) -> < | ______- LL | | < LL | | <T::Wrapper<T> as FooBar>::Assoc as FooBar LL | | >::Assoc as FooBar LL | | >::Wrapper<<T::Assoc as FooBar>::Assoc> | |_______________________________________- expected `<_ as FooBar>::Wrapper<_>` because of return type ... LL | value...oc()) | ^^^^^...^^^^^ expected `really_really_really_long_module::FooBar::Wrapper`, found `really_really_really_long_module::FooBar::Assoc` | = note: expected associated type `<<<<_ as FooBar>::Wrapper<_> as...pper<_>` found associated type `<<<<_ as FooBar>::Assoc as Fo...pper<_>` = note: an associated type was expected, but a different one was found = note: the full name for the type has been written to '$TEST_BUILD_DIR/long-type-E0308.long-type-$LONG_TYPE_HASH.txt' = note: consider using `--verbose` to print the full type name to the console ``` r? @chenyukang
View all comments
When encountering a E0308 error involving
ty::Projections, highlight only the sub-parts that are actually relevant:Fix #159043, by including a textual type shortening logic that operates on the highlighted text on really narrow terminals:
r? @chenyukang