rust/tests/ui/impl-trait/in-trait
bors b3f75cc872 Auto merge of #132147 - estebank:long-types-2, r=davidtwco
Tweak E0277 output when a candidate is available

*Follow up to #132086.*

Go from

```
error[E0277]: the trait bound `Then<Ignored<chumsky::combinator::Filter<chumsky::primitive::Any<&str, chumsky::extra::Full<EmptyErr, (), ()>>, {closure@src/main.rs:9:17: 9:27}>, char>, chumsky::combinator::Map<impl CSTParser<'a, O>, O, {closure@src/main.rs:11:24: 11:27}>, (), (), chumsky::extra::Full<EmptyErr, (), ()>>: CSTParser<'a>` is not satisfied
 --> src/main.rs:7:50
  |
7 | fn leaf<'a, O>(parser: impl CSTParser<'a, O>) -> impl CSTParser<'a, ()> {
  |                                                  ^^^^^^^^^^^^^^^^^^^^^^ the trait `chumsky::private::ParserSealed<'_, &str, (), chumsky::extra::Full<EmptyErr, (), ()>>` is not implemented for `Then<Ignored<Filter<Any<&str, ...>, ...>, ...>, ..., ..., ..., ...>`, which is required by `Then<Ignored<chumsky::combinator::Filter<chumsky::primitive::Any<&str, chumsky::extra::Full<EmptyErr, (), ()>>, {closure@src/main.rs:9:17: 9:27}>, char>, chumsky::combinator::Map<impl CSTParser<'a, O>, O, {closure@src/main.rs:11:24: 11:27}>, (), (), chumsky::extra::Full<EmptyErr, (), ()>>: CSTParser<'a>`
  |
  = help: the trait `chumsky::private::ParserSealed<'_, &'a str, ((), ()), chumsky::extra::Full<EmptyErr, (), ()>>` is implemented for `Then<Ignored<chumsky::combinator::Filter<chumsky::primitive::Any<&str, chumsky::extra::Full<EmptyErr, (), ()>>, {closure@src/main.rs:9:17: 9:27}>, char>, chumsky::combinator::Map<impl CSTParser<'a, O>, O, {closure@src/main.rs:11:24: 11:27}>, (), (), chumsky::extra::Full<EmptyErr, (), ()>>`
  = help: for that trait implementation, expected `((), ())`, found `()`
  = note: required for `Then<Ignored<Filter<Any<&str, ...>, ...>, ...>, ..., ..., ..., ...>` to implement `Parser<'_, &str, ()>`
note: required for `Then<Ignored<Filter<Any<&str, ...>, ...>, ...>, ..., ..., ..., ...>` to implement `CSTParser<'a>`
 --> src/main.rs:5:16
  |
5 | impl<'a, O, T> CSTParser<'a, O> for T where T: Parser<'a, &'a str, O> {}
  |                ^^^^^^^^^^^^^^^^     ^          ---------------------- unsatisfied trait bound introduced here
  = note: the full name for the type has been written to '/home/gh-estebank/longlong/target/debug/deps/longlong-0008f9a4f2023b08.long-type-13239977239800463552.txt'
  = note: consider using `--verbose` to print the full type name to the console
  = note: the full name for the type has been written to '/home/gh-estebank/longlong/target/debug/deps/longlong-0008f9a4f2023b08.long-type-13239977239800463552.txt'
  = note: consider using `--verbose` to print the full type name to the console
```

to

```
error[E0277]: the trait bound `Then<Ignored<chumsky::combinator::Filter<chumsky::primitive::Any<&str, chumsky::extra::Full<EmptyErr, (), ()>>, {closure@src/main.rs:9:17: 9:27}>, char>, chumsky::combinator::Map<impl CSTParser<'a, O>, O, {closure@src/main.rs:11:24: 11:27}>, (), (), chumsky::extra::Full<EmptyErr, (), ()>>: CSTParser<'a>` is not satisfied
  --> src/main.rs:7:50
   |
7  | fn leaf<'a, O>(parser: impl CSTParser<'a, O>) -> impl CSTParser<'a, ()> {
   |                                                  ^^^^^^^^^^^^^^^^^^^^^^ unsatisfied trait bound
...
11 |     ws.then(parser.map(|_| ()))
   |     --------------------------- return type was inferred to be `Then<Ignored<..., ...>, ..., ..., ..., ...>` here
   |
   = help: the trait `ParserSealed<'_, &_, (), Full<_, _, _>>` is not implemented for `Then<Ignored<..., ...>, ..., ..., ..., ...>`
           but trait `ParserSealed<'_, &'a _, ((), ()), Full<_, _, _>>` is implemented for it
   = help: for that trait implementation, expected `((), ())`, found `()`
   = note: required for `Then<Ignored<..., ...>, ..., ..., ..., ...>` to implement `Parser<'_, &str, ()>`
note: required for `Then<Ignored<..., ...>, ..., ..., ..., ...>` to implement `CSTParser<'a>`
  --> src/main.rs:5:16
   |
5  | impl<'a, O, T> CSTParser<'a, O> for T where T: Parser<'a, &'a str, O> {}
   |                ^^^^^^^^^^^^^^^^     ^          ---------------------- unsatisfied trait bound introduced here
   = note: the full name for the type has been written to '/home/gh-estebank/longlong/target/debug/deps/longlong-df9d52be87eada65.long-type-1337037744507305372.txt'
   = note: consider using `--verbose` to print the full type name to the console
```

* Remove redundant wording
* Introduce trait diff highlighting logic and use it
* Fix incorrect "long type written to path" logic (can be split off)
* Point at tail expression in more cases in E0277
* Avoid long primary span labels in E0277 by moving them to a `help`

Fix #132013.

There are individual commits that can be their own PR. If the review load is too big, happy to split them off.
2024-11-02 20:22:49 +00:00
..
auxiliary RFC 2383: Stabilize lint_reasons 🎉 2024-06-25 17:22:22 +02:00
alias-bounds-when-not-wf.rs Be better at reporting alias errors 2024-10-15 20:42:17 -04:00
alias-bounds-when-not-wf.stderr Be better at reporting alias errors 2024-10-15 20:42:17 -04:00
anonymize-binders-for-refine.rs [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
assumed-wf-bounds-in-impl.rs [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
async-and-ret-ref.rs Print RPITIT like an opaque 2024-02-27 17:43:40 +00:00
async-and-ret-ref.stderr Print RPITIT like an opaque 2024-02-27 17:43:40 +00:00
bad-item-bound-within-rpitit-2.rs Stop proving outlives constraints on regions we already reported errors on 2024-05-29 09:27:07 +00:00
bad-item-bound-within-rpitit-2.stderr Stop proving outlives constraints on regions we already reported errors on 2024-05-29 09:27:07 +00:00
bad-item-bound-within-rpitit.rs Stabilize AFIT and RPITIT 2023-10-13 21:01:36 +00:00
bad-item-bound-within-rpitit.stderr Split refining_impl_trait lint into _reachable, _internal variants 2024-03-05 16:19:16 -08:00
bad-projection-from-opaque.rs Move an impl-Trait check from AST validation to AST lowering 2024-10-27 07:41:52 +01:00
bad-projection-from-opaque.stderr Move an impl-Trait check from AST validation to AST lowering 2024-10-27 07:41:52 +01:00
box-coerce-span-in-default.rs [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
cannot-capture-intersection.rs Bless test fallout 2024-08-17 12:43:25 -04:00
cannot-capture-intersection.stderr Bless test fallout 2024-08-17 12:43:25 -04:00
check-wf-on-non-defaulted-rpitit.rs Stabilize AFIT and RPITIT 2023-10-13 21:01:36 +00:00
check-wf-on-non-defaulted-rpitit.stderr Show number in error message even for one error 2023-11-24 19:15:52 +01:00
cycle-effective-visibilities-during-dyn-compatibility-check.rs UI tests: Rename "object safe" to "dyn compatible" 2024-10-10 01:13:29 +02:00
cycle-effective-visibilities-during-dyn-compatibility-check.stderr UI tests: Rename "object safe" to "dyn compatible" 2024-10-10 01:13:29 +02:00
deep-match-works.rs RFC 2383: Stabilize lint_reasons 🎉 2024-06-25 17:22:22 +02:00
deep-match.rs Remove incomplete features from RPITIT/AFIT tests 2023-10-24 15:27:06 +00:00
deep-match.stderr Show number in error message even for one error 2023-11-24 19:15:52 +01:00
default-body-type-err-2.rs Remove some unnecessary allow(incomplete_features) 2024-03-11 19:42:04 +00:00
default-body-type-err-2.stderr Remove some unnecessary allow(incomplete_features) 2024-03-11 19:42:04 +00:00
default-body-type-err.rs Remove incomplete features from RPITIT/AFIT tests 2023-10-24 15:27:06 +00:00
default-body-type-err.stderr Stop inverting expectation in normalization errors 2024-10-16 13:44:56 -04:00
default-body-with-rpit.rs Remove some unnecessary allow(incomplete_features) 2024-03-11 19:42:04 +00:00
default-body.rs Remove some unnecessary allow(incomplete_features) 2024-03-11 19:42:04 +00:00
default-method-binder-shifting.rs [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
default-method-constraint.rs [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
doesnt-satisfy.rs Remove incomplete features from RPITIT/AFIT tests 2023-10-24 15:27:06 +00:00
doesnt-satisfy.stderr rename RPITIT from opaque to synthetic 2024-02-27 17:43:40 +00:00
dont-project-to-rpitit-with-no-value.rs Stabilize AFIT and RPITIT 2023-10-13 21:01:36 +00:00
dont-project-to-rpitit-with-no-value.stderr Show number in error message even for one error 2023-11-24 19:15:52 +01:00
dyn-compatibility-sized.rs UI tests: Rename "object safe" to "dyn compatible" 2024-10-10 01:13:29 +02:00
dyn-compatibility.rs UI tests: Rename "object safe" to "dyn compatible" 2024-10-10 01:13:29 +02:00
dyn-compatibility.stderr UI tests: Rename "object safe" to "dyn compatible" 2024-10-10 01:13:29 +02:00
early.rs Remove some unnecessary allow(incomplete_features) 2024-03-11 19:42:04 +00:00
encode.rs Remove some unnecessary allow(incomplete_features) 2024-03-11 19:42:04 +00:00
ensure-rpitits-are-created-before-freezing.rs Ensure RPITITs are created before def-id freezing 2024-03-14 20:30:57 -04:00
ensure-rpitits-are-created-before-freezing.stderr Ensure RPITITs are created before def-id freezing 2024-03-14 20:30:57 -04:00
expeced-refree-to-map-to-reearlybound-ice-108580.rs add test for ICE: no errors encountered even though delay_span_bug issued, expected ReFree to map to ReEarlyBound #108580 2024-03-24 10:35:24 +01:00
expeced-refree-to-map-to-reearlybound-ice-108580.stderr add test for ICE: no errors encountered even though delay_span_bug issued, expected ReFree to map to ReEarlyBound #108580 2024-03-24 10:35:24 +01:00
false-positive-predicate-entailment-error.current.stderr Remove detail from label/note that is already available in other note 2024-10-29 16:26:57 +00:00
false-positive-predicate-entailment-error.rs Move ty::Error branch into super_combine_tys 2024-10-10 06:07:51 -04:00
foreign-dyn-error.rs [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
foreign-dyn-error.stderr Compiler: Rename "object safe" to "dyn compatible" 2024-09-25 13:26:48 +02:00
foreign.rs RFC 2383: Stabilize lint_reasons 🎉 2024-06-25 17:22:22 +02:00
foreign.stderr RFC 2383: Stabilize lint_reasons 🎉 2024-06-25 17:22:22 +02:00
gat-outlives.rs [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
gat-outlives.stderr Fix outlives suggestion for GAT in RPITIT 2023-10-16 15:42:26 +00:00
generics-mismatch.rs Remove incomplete features from RPITIT/AFIT tests 2023-10-24 15:27:06 +00:00
generics-mismatch.stderr Show number in error message even for one error 2023-11-24 19:15:52 +01:00
issue-102140.rs Deduplicate more sized errors on call exprs 2024-01-24 02:53:15 +00:00
issue-102140.stderr Deduplicate more sized errors on call exprs 2024-01-24 02:53:15 +00:00
issue-102301.rs Remove some unnecessary allow(incomplete_features) 2024-03-11 19:42:04 +00:00
issue-102571.rs Remove incomplete features from RPITIT/AFIT tests 2023-10-24 15:27:06 +00:00
issue-102571.stderr Show number in error message even for one error 2023-11-24 19:15:52 +01:00
late-bound-in-object-assocty.rs Use more minimized test. 2024-11-01 18:13:26 +00:00
lifetime-in-associated-trait-bound.rs Stabilize associated type bounds 2024-03-08 20:56:25 +00:00
method-signature-matches.lt.stderr Use verbose suggestion for changing arg type 2024-07-05 20:58:33 +00:00
method-signature-matches.mismatch_async.stderr Use verbose suggestion for changing arg type 2024-07-05 20:58:33 +00:00
method-signature-matches.mismatch.stderr Use verbose suggestion for changing arg type 2024-07-05 20:58:33 +00:00
method-signature-matches.rs Remove some unnecessary allow(incomplete_features) 2024-03-11 19:42:04 +00:00
method-signature-matches.too_few.stderr Remove some unnecessary allow(incomplete_features) 2024-03-11 19:42:04 +00:00
method-signature-matches.too_many.stderr Remove some unnecessary allow(incomplete_features) 2024-03-11 19:42:04 +00:00
missing-lt-outlives-in-rpitit-114274.rs Stabilize AFIT and RPITIT 2023-10-13 21:01:36 +00:00
missing-lt-outlives-in-rpitit-114274.stderr Show number in error message even for one error 2023-11-24 19:15:52 +01:00
missing-static-bound-from-impl.rs Print RPITIT like an opaque 2024-02-27 17:43:40 +00:00
missing-static-bound-from-impl.stderr Print RPITIT like an opaque 2024-02-27 17:43:40 +00:00
nested-rpitit-bounds.rs also remap RPITITs nested in other types back to their opaques 2024-04-21 18:04:50 +02:00
nested-rpitit.rs RFC 2383: Stabilize lint_reasons 🎉 2024-06-25 17:22:22 +02:00
opaque-and-lifetime-mismatch.rs Delay a bug if no RPITITs were found 2024-03-22 22:56:28 +01:00
opaque-and-lifetime-mismatch.stderr Revert suggestion verbosity change 2024-07-22 22:51:53 +00:00
opaque-in-impl-is-opaque.rs Remove incomplete features from RPITIT/AFIT tests 2023-10-24 15:27:06 +00:00
opaque-in-impl-is-opaque.stderr Show number in error message even for one error 2023-11-24 19:15:52 +01:00
opaque-in-impl.rs Remove some unnecessary allow(incomplete_features) 2024-03-11 19:42:04 +00:00
opaque-variances.rs [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
outlives-in-nested-rpit.rs [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
placeholder-implied-bounds.rs borrowck: more eagerly prepopulate opaques 2024-05-06 16:04:57 +00:00
refine-err.rs Don't trigger refinement lint if predicates reference errors 2024-08-22 12:34:12 -04:00
refine-err.stderr Don't trigger refinement lint if predicates reference errors 2024-08-22 12:34:12 -04:00
refine-normalize.rs Ignore tests w/ current/next revisions from compare-mode=next-solver 2024-03-10 21:18:41 -04:00
refine-resolution-errors.rs delay bug in RPITIT refinement checking with resolution errors 2024-06-25 21:05:54 +00:00
refine-resolution-errors.stderr delay bug in RPITIT refinement checking with resolution errors 2024-06-25 21:05:54 +00:00
refine.rs Split refining_impl_trait lint into _reachable, _internal variants 2024-03-05 16:19:16 -08:00
refine.stderr Split refining_impl_trait lint into _reachable, _internal variants 2024-03-05 16:19:16 -08:00
return-dont-satisfy-bounds.rs Move ty::Error branch into super_combine_tys 2024-10-10 06:07:51 -04:00
return-dont-satisfy-bounds.stderr Add trait diff highlighting logic and use it in E0277 2024-11-02 03:08:04 +00:00
return-type-notation.rs Promote crashes tests to ui. 2024-10-30 16:19:53 +00:00
return-type-notation.stderr Promote crashes tests to ui. 2024-10-30 16:19:53 +00:00
reveal.rs RFC 2383: Stabilize lint_reasons 🎉 2024-06-25 17:22:22 +02:00
rpitit-cycle-in-generics-of.rs Uplift some feeding out of associated_type_for_impl_trait_in_impl and into queries 2024-03-05 15:55:31 +00:00
rpitit-hidden-types-self-implied-wf-via-param.rs Stabilize AFIT and RPITIT 2023-10-13 21:01:36 +00:00
rpitit-hidden-types-self-implied-wf-via-param.stderr Show number in error message even for one error 2023-11-24 19:15:52 +01:00
rpitit-hidden-types-self-implied-wf.rs Stabilize AFIT and RPITIT 2023-10-13 21:01:36 +00:00
rpitit-hidden-types-self-implied-wf.stderr Show number in error message even for one error 2023-11-24 19:15:52 +01:00
rpitit-shadowed-by-missing-adt.rs RFC 2383: Stabilize lint_reasons 🎉 2024-06-25 17:22:22 +02:00
rpitit-shadowed-by-missing-adt.stderr RFC 2383: Stabilize lint_reasons 🎉 2024-06-25 17:22:22 +02:00
shorthand-projection-in-rpitit-bound.rs Make sure type_param_predicates resolves correctly for RPITIT 2024-10-30 22:30:28 +00:00
sibling-function-constraint.rs Test that RPITITs have RPIT scope and not impl-wide scope 2023-10-13 21:01:36 +00:00
sibling-function-constraint.stderr Show number in error message even for one error 2023-11-24 19:15:52 +01:00
signature-mismatch.failure.stderr RFC 2383: Stabilize lint_reasons 🎉 2024-06-25 17:22:22 +02:00
signature-mismatch.rs RFC 2383: Stabilize lint_reasons 🎉 2024-06-25 17:22:22 +02:00
span-bug-issue-121457.rs Don't trigger refinement lint if predicates reference errors 2024-08-22 12:34:12 -04:00
span-bug-issue-121457.stderr Don't trigger refinement lint if predicates reference errors 2024-08-22 12:34:12 -04:00
specialization-broken.rs Stabilize AFIT and RPITIT 2023-10-13 21:01:36 +00:00
specialization-broken.stderr Use verbose suggestion for changing arg type 2024-07-05 20:58:33 +00:00
specialization-substs-remap.rs RFC 2383: Stabilize lint_reasons 🎉 2024-06-25 17:22:22 +02:00
success.rs RFC 2383: Stabilize lint_reasons 🎉 2024-06-25 17:22:22 +02:00
suggest-missing-item.fixed [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
suggest-missing-item.rs [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
suggest-missing-item.stderr Update tests 2024-02-07 10:42:01 +08:00
synthetic-hir-has-parent.rs Tests for getting parent of synthetic HIR 2024-04-03 17:44:47 -04:00
synthetic-hir-has-parent.stderr Tests for getting parent of synthetic HIR 2024-04-03 17:44:47 -04:00
trait-more-generics-than-impl.rs Differentiate between methods and associated functions 2024-08-10 00:54:16 +00:00
trait-more-generics-than-impl.stderr Differentiate between methods and associated functions 2024-08-10 00:54:16 +00:00
unconstrained-lt.rs Stabilize AFIT and RPITIT 2023-10-13 21:01:36 +00:00
unconstrained-lt.stderr Show number in error message even for one error 2023-11-24 19:15:52 +01:00
variance.rs Remap impl-trait lifetimes on HIR instead of AST lowering. 2024-10-30 16:18:50 +00:00
variance.stderr Remap impl-trait lifetimes on HIR instead of AST lowering. 2024-10-30 16:18:50 +00:00
variances-of-gat.rs [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
wf-bounds.rs Remove some unnecessary allow(incomplete_features) 2024-03-11 19:42:04 +00:00
wf-bounds.stderr Remove some unnecessary allow(incomplete_features) 2024-03-11 19:42:04 +00:00
where-clause.rs Remove some unnecessary allow(incomplete_features) 2024-03-11 19:42:04 +00:00