name async generators something more human friendly in type error diagnostics
This commit is contained in:
parent
b05fd2a15d
commit
c28d86c53b
8 changed files with 103 additions and 17 deletions
16
src/test/ui/async-await/generator-desc.rs
Normal file
16
src/test/ui/async-await/generator-desc.rs
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
// edition:2018
|
||||
#![feature(async_closure)]
|
||||
use std::future::Future;
|
||||
|
||||
async fn one() {}
|
||||
async fn two() {}
|
||||
|
||||
fn fun<F: Future<Output = ()>>(f1: F, f2: F) {}
|
||||
fn main() {
|
||||
fun(async {}, async {});
|
||||
//~^ ERROR mismatched types
|
||||
fun(one(), two());
|
||||
//~^ ERROR mismatched types
|
||||
fun((async || {})(), (async || {})());
|
||||
//~^ ERROR mismatched types
|
||||
}
|
||||
49
src/test/ui/async-await/generator-desc.stderr
Normal file
49
src/test/ui/async-await/generator-desc.stderr
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
error[E0308]: mismatched types
|
||||
--> $DIR/generator-desc.rs:10:25
|
||||
|
|
||||
LL | fun(async {}, async {});
|
||||
| -- ^^ expected `async` block, found a different `async` block
|
||||
| |
|
||||
| the expected `async` block
|
||||
|
|
||||
= note: expected `async` block `[static generator@$DIR/generator-desc.rs:10:15: 10:17]`
|
||||
found `async` block `[static generator@$DIR/generator-desc.rs:10:25: 10:27]`
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/generator-desc.rs:12:16
|
||||
|
|
||||
LL | async fn one() {}
|
||||
| - the `Output` of this `async fn`'s expected opaque type
|
||||
LL | async fn two() {}
|
||||
| - the `Output` of this `async fn`'s found opaque type
|
||||
...
|
||||
LL | fun(one(), two());
|
||||
| ^^^^^ expected opaque type, found a different opaque type
|
||||
|
|
||||
= note: expected opaque type `impl Future` (opaque type at <$DIR/generator-desc.rs:5:16>)
|
||||
found opaque type `impl Future` (opaque type at <$DIR/generator-desc.rs:6:16>)
|
||||
= help: consider `await`ing on both `Future`s
|
||||
= note: distinct uses of `impl Trait` result in different opaque types
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/generator-desc.rs:14:26
|
||||
|
|
||||
LL | fun((async || {})(), (async || {})());
|
||||
| -- ^^^^^^^^^^^^^^^ expected `async` closure body, found a different `async` closure body
|
||||
| |
|
||||
| the expected `async` closure body
|
||||
|
|
||||
::: $SRC_DIR/core/src/future/mod.rs:LL:COL
|
||||
|
|
||||
LL | pub const fn from_generator<T>(gen: T) -> impl Future<Output = T::Return>
|
||||
| -------------------------------
|
||||
| |
|
||||
| the expected opaque type
|
||||
| the found opaque type
|
||||
|
|
||||
= note: expected opaque type `impl Future` (`async` closure body)
|
||||
found opaque type `impl Future` (`async` closure body)
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0308`.
|
||||
Loading…
Add table
Add a link
Reference in a new issue