rust/tests/ui/type-alias-impl-trait
Vincenzo Palazzo 2bdc9a046a
fix: improve the suggestion on future not awaited
Considering the following code

```rust
fn foo() -> u8 {
    async fn async_fn() -> u8 {  22 }

    async_fn()
}

fn main() {}
```

the error generated before this commit from the compiler is

```
➜  rust git:(macros/async_fn_suggestion) ✗ rustc test.rs --edition 2021
error[E0308]: mismatched types
 --> test.rs:4:5
  |
1 | fn foo() -> u8 {
  |             -- expected `u8` because of return type
...
4 |     async_fn()
  |     ^^^^^^^^^^ expected `u8`, found opaque type
  |
  = note:     expected type `u8`
          found opaque type `impl Future<Output = u8>`
help: consider `await`ing on the `Future`
  |
4 |     async_fn().await
  |               ++++++

error: aborting due to previous error
```

In this case the error is nor perfect, and can confuse the user
that do not know that the opaque type is the future.

So this commit will propose (and conclude the work start in
https://github.com/rust-lang/rust/issues/80658)
to change the string `opaque type` to `future` when applicable
and also remove the Expected vs Received note by adding a more
specific one regarding the async function that return a future type.

So the new error emitted by the compiler is

```
error[E0308]: mismatched types
 --> test.rs:4:5
  |
1 | fn foo() -> u8 {
  |             -- expected `u8` because of return type
...
4 |     async_fn()
  |     ^^^^^^^^^^ expected `u8`, found future
  |
note: calling an async function returns a future
 --> test.rs:4:5
  |
4 |     async_fn()
  |     ^^^^^^^^^^
help: consider `await`ing on the `Future`
  |
4 |     async_fn().await
  |               ++++++

error: aborting due to previous error
```

Signed-off-by: Vincenzo Palazzo <vincenzopalazzodev@gmail.com>
2023-02-13 16:23:23 +01:00
..
auxiliary
argument-types.rs
assoc-projection-ice.rs
assoc-type-const.rs
assoc-type-lifetime-unconstrained.rs
assoc-type-lifetime-unconstrained.stderr
assoc-type-lifetime.rs
associated-type-alias-impl-trait.rs
associated-type-impl-trait-lifetime.rs
auto-trait-leakage2.rs
auto-trait-leakage2.stderr
auto-trait-leakage3.rs
auto-trait-leakage3.stderr
auto-trait-leakage.rs
bound_reduction2.rs Improve a TAIT error and add an error code plus documentation 2023-01-16 16:54:14 +00:00
bound_reduction2.stderr Improve a TAIT error and add an error code plus documentation 2023-01-16 16:54:14 +00:00
bound_reduction.rs
bounds-are-checked-2.rs
bounds-are-checked-2.stderr
bounds-are-checked.rs Handle diagnostics customization on the fluent side 2023-01-17 08:21:34 +00:00
bounds-are-checked.stderr Handle diagnostics customization on the fluent side 2023-01-17 08:21:34 +00:00
closure_args2.rs
closure_args.rs
closure_parent_substs.rs
closure_wf_outlives.rs
closure_wf_outlives.stderr
closures_in_branches.rs
closures_in_branches.stderr
coherence_cross_crate.rs
coherence_cross_crate.stderr
coherence_generalization.rs
coherence.rs
coherence.stderr
collect_hidden_types.rs
constrain_inputs_unsound.rs
constrain_inputs_unsound.stderr
constrain_inputs.rs
constrain_inputs.stderr
cross_crate_ice2.rs
cross_crate_ice.rs
cross_inference_pattern_bug_no_type.rs
cross_inference_pattern_bug.rs
cross_inference_rpit.rs
cross_inference.rs
declared_but_never_defined.rs
declared_but_never_defined.stderr
declared_but_not_defined_in_scope.rs
declared_but_not_defined_in_scope.stderr
defining-use-submodule.rs
destructuring.rs
different_defining_uses_never_type2.rs
different_defining_uses_never_type3.rs
different_defining_uses_never_type3.stderr
different_defining_uses_never_type.rs
different_defining_uses_never_type.stderr
different_defining_uses.rs
different_defining_uses.stderr
different_lifetimes_defining_uses.rs
different_lifetimes_defining_uses.stderr
fallback.rs
fallback.stderr
field-types.rs
future.rs
future.stderr
generic_different_defining_uses.rs
generic_different_defining_uses.stderr
generic_duplicate_lifetime_param.rs
generic_duplicate_lifetime_param.stderr
generic_duplicate_param_use2.rs
generic_duplicate_param_use2.stderr
generic_duplicate_param_use3.rs
generic_duplicate_param_use3.stderr
generic_duplicate_param_use4.rs
generic_duplicate_param_use4.stderr
generic_duplicate_param_use5.rs
generic_duplicate_param_use5.stderr
generic_duplicate_param_use6.rs
generic_duplicate_param_use6.stderr
generic_duplicate_param_use7.rs
generic_duplicate_param_use8.rs
generic_duplicate_param_use8.stderr
generic_duplicate_param_use9.rs
generic_duplicate_param_use9.stderr
generic_duplicate_param_use10.rs
generic_duplicate_param_use.rs
generic_duplicate_param_use.stderr
generic_lifetime_param.rs
generic_nondefining_use.rs Handle diagnostics customization on the fluent side 2023-01-17 08:21:34 +00:00
generic_nondefining_use.stderr Handle diagnostics customization on the fluent side 2023-01-17 08:21:34 +00:00
generic_not_used.rs
generic_not_used.stderr
generic_type_does_not_live_long_enough.rs Introduce ReError 2023-02-09 10:26:49 +00:00
generic_type_does_not_live_long_enough.stderr Introduce ReError 2023-02-09 10:26:49 +00:00
generic_underconstrained2.rs
generic_underconstrained2.stderr
generic_underconstrained.rs
generic_underconstrained.stderr
impl_trait_for_generic_tait.rs
impl_trait_for_same_tait.rs
impl_trait_for_same_tait.stderr
impl_trait_for_tait_bound2.rs
impl_trait_for_tait_bound2.stderr
impl_trait_for_tait_bound.rs
impl_trait_for_tait_bound.stderr
impl_trait_for_tait.rs
impl-with-unconstrained-param.rs
impl-with-unconstrained-param.stderr
implied_bounds2.rs
implied_bounds3.rs
implied_bounds_closure.rs
implied_bounds_closure.stderr
implied_bounds_from_types.rs
implied_bounds_from_types.stderr
implied_bounds.rs
implied_bounds.stderr
implied_lifetime_wf_check3.rs
implied_lifetime_wf_check3.stderr
implied_lifetime_wf_check4_static.rs
implied_lifetime_wf_check4_static.stderr
implied_lifetime_wf_check.rs
imply_bounds_from_bounds_param.rs
imply_bounds_from_bounds_param.stderr
imply_bounds_from_bounds.rs
incoherent-assoc-imp-trait.rs
incoherent-assoc-imp-trait.stderr
incomplete-inference.rs
incomplete-inference.stderr
inference-cycle.rs
inference-cycle.stderr
issue-52843-closure-constrain.rs
issue-52843-closure-constrain.stderr
issue-52843.rs
issue-52843.stderr
issue-53092-2.rs delay E0512 as a bug by checking the references_error 2023-01-17 09:20:15 -08:00
issue-53092-2.stderr delay E0512 as a bug by checking the references_error 2023-01-17 09:20:15 -08:00
issue-53092.rs
issue-53092.stderr
issue-53096.rs
issue-53096.stderr
issue-53398-cyclic-types.rs
issue-53398-cyclic-types.stderr
issue-53598.rs
issue-53598.stderr
issue-53678-generator-and-const-fn.rs
issue-53678-generator-and-const-fn.stderr
issue-55099-lifetime-inference.rs
issue-57188-associate-impl-capture.rs
issue-57611-trait-alias.rs
issue-57700.rs
issue-57700.stderr
issue-57807-associated-type.rs
issue-57961.rs
issue-57961.stderr
issue-58662-generator-with-lifetime.rs
issue-58662-simplified.rs
issue-58887.rs
issue-58951-2.rs
issue-58951.rs
issue-60371.rs
issue-60371.stderr
issue-60407.rs
issue-60407.stderr
issue-60564-working.rs
issue-60564.rs Improve a TAIT error and add an error code plus documentation 2023-01-16 16:54:14 +00:00
issue-60564.stderr Improve a TAIT error and add an error code plus documentation 2023-01-16 16:54:14 +00:00
issue-60662.rs
issue-60662.stdout
issue-62000-associate-impl-trait-lifetimes.rs
issue-63263-closure-return.rs
issue-63279.rs
issue-63279.stderr
issue-63355.rs
issue-63677-type-alias-coherence.rs
issue-65384.rs
issue-65384.stderr
issue-65679-inst-opaque-ty-from-val-twice.rs
issue-65918.rs
issue-66580-closure-coherence.rs
issue-67844-nested-opaque.rs
issue-68368-non-defining-use-2.rs Improve a TAIT error and add an error code plus documentation 2023-01-16 16:54:14 +00:00
issue-68368-non-defining-use-2.stderr Improve a TAIT error and add an error code plus documentation 2023-01-16 16:54:14 +00:00
issue-68368-non-defining-use.rs Improve a TAIT error and add an error code plus documentation 2023-01-16 16:54:14 +00:00
issue-68368-non-defining-use.stderr Improve a TAIT error and add an error code plus documentation 2023-01-16 16:54:14 +00:00
issue-69136-inner-lifetime-resolve-error.rs Improve a TAIT error and add an error code plus documentation 2023-01-16 16:54:14 +00:00
issue-69136-inner-lifetime-resolve-error.stderr Improve a TAIT error and add an error code plus documentation 2023-01-16 16:54:14 +00:00
issue-69136-inner-lifetime-resolve-ok.rs
issue-69323.rs
issue-70121.rs
issue-72793.rs
issue-74244.rs
issue-74244.stderr
issue-74280.rs
issue-74280.stderr
issue-74761-2.rs
issue-74761-2.stderr
issue-74761.rs
issue-74761.stderr
issue-76202-trait-impl-for-tait.rs
issue-77179.rs
issue-77179.stderr
issue-78450.rs
issue-84660-trait-impl-for-tait.rs
issue-84660-unsoundness.rs
issue-84660-unsoundness.stderr
issue-87455-static-lifetime-ice.rs
issue-89686.rs
issue-89686.stderr
issue-89952.rs
issue-90400-1.rs
issue-90400-1.stderr
issue-90400-2.rs
issue-90400-2.stderr
issue-93411.rs
issue-94429.rs
issue-94429.stderr
issue-96572-unconstrained-mismatch.rs
issue-96572-unconstrained-mismatch.stderr
issue-96572-unconstrained.rs
issue-98604.rs Tweak E0271 wording 2023-01-30 21:51:35 +00:00
issue-98604.stderr fix: improve the suggestion on future not awaited 2023-02-13 16:23:23 +01:00
issue-98608.rs Tweak E0271 wording 2023-01-30 21:51:35 +00:00
issue-98608.stderr Tweak E0271 wording 2023-01-30 21:51:35 +00:00
issue-101750.rs
issue-104817.rs Don't treat closures from other crates as local 2023-01-19 11:29:40 +00:00
issue-104817.stock.stderr Don't treat closures from other crates as local 2023-01-19 11:29:40 +00:00
missing_lifetime_bound.rs
missing_lifetime_bound.stderr
multiple_definitions.rs
multiple-def-uses-in-one-fn2.rs
multiple-def-uses-in-one-fn2.stderr
multiple-def-uses-in-one-fn3.rs
multiple-def-uses-in-one-fn3.stderr
multiple-def-uses-in-one-fn-infer.rs
multiple-def-uses-in-one-fn-infer.stderr
multiple-def-uses-in-one-fn-lifetimes.rs
multiple-def-uses-in-one-fn-lifetimes.stderr
multiple-def-uses-in-one-fn-pass.rs
multiple-def-uses-in-one-fn.rs
multiple-def-uses-in-one-fn.stderr
nested_type_alias_impl_trait.rs
nested_type_alias_impl_trait.stderr
nested-tait-inference2.rs
nested-tait-inference2.stderr
nested-tait-inference3.rs
nested-tait-inference3.stderr
nested-tait-inference.rs
nested-tait-inference.stderr
nested.rs
nested.stderr
never_reveal_concrete_type.rs
no_inferrable_concrete_type.rs delay E0512 as a bug by checking the references_error 2023-01-17 09:20:15 -08:00
no_inferrable_concrete_type.stderr delay E0512 as a bug by checking the references_error 2023-01-17 09:20:15 -08:00
no_revealing_outside_defining_module.rs
no_revealing_outside_defining_module.stderr
not_a_defining_use.rs
not_a_defining_use.stderr
not_well_formed.rs
not_well_formed.stderr
outlives-bound-var.rs add test for ICE fix 2023-01-19 15:31:59 +03:00
reveal_local.rs
reveal_local.stderr
self_implication.rs
self-referential-2.rs
self-referential-2.stderr
self-referential-3.rs
self-referential-4.rs
self-referential-4.stderr
self-referential.rs
self-referential.stderr
static-const-types.rs
structural-match-no-leak.rs
structural-match-no-leak.stderr
structural-match.rs
structural-match.stderr
type_of_a_let.rs
type_of_a_let.stderr
type-alias-impl-trait2.rs
type-alias-impl-trait-assoc-dyn.rs
type-alias-impl-trait-assoc-impl-trait.rs
type-alias-impl-trait-const.rs
type-alias-impl-trait-fn-type.rs
type-alias-impl-trait-fn-type.stderr
type-alias-impl-trait-fns.rs
type-alias-impl-trait-sized.rs
type-alias-impl-trait-struct.rs
type-alias-impl-trait-tuple.rs
type-alias-impl-trait-unconstrained-lifetime.rs
type-alias-impl-trait-unconstrained-lifetime.stderr
type-alias-impl-trait-with-cycle-error2.rs
type-alias-impl-trait-with-cycle-error2.stderr
type-alias-impl-trait-with-cycle-error.rs
type-alias-impl-trait-with-cycle-error.stderr
type-alias-impl-trait-with-no-traits.rs
type-alias-impl-trait-with-no-traits.stderr
type-alias-impl-trait.rs
type-alias-nested-impl-trait.rs
unbounded_opaque_type.rs
underconstrained_generic.rs
underconstrained_generic.stderr
underconstrained_lifetime.rs
underconstrained_lifetime.stderr
unnameable_type.rs Test that we cannot use trait impl methods arguments as defining uses 2023-01-11 14:00:25 -08:00
unnameable_type.stderr Modify primary span label for E0308 2023-01-30 20:12:19 +00:00
unused_generic_param.rs
weird-return-types.rs
wf_check_closures.rs
wf_check_closures.stderr
wf-check-fn-def.rs
wf-check-fn-def.stderr
wf-check-fn-ptrs.rs