Make async removal span more resilient to macro expansions
This commit is contained in:
parent
d4200276f2
commit
6d6c904431
7 changed files with 68 additions and 24 deletions
|
|
@ -12,7 +12,7 @@
|
|||
_1: GeneratorSavedTy {
|
||||
ty: impl std::future::Future<Output = ()>,
|
||||
source_info: SourceInfo {
|
||||
span: $DIR/async_await.rs:16:8: 16:14 (#10),
|
||||
span: $DIR/async_await.rs:16:9: 16:14 (#10),
|
||||
scope: scope[0],
|
||||
},
|
||||
ignore_for_traits: false,
|
||||
|
|
|
|||
|
|
@ -143,7 +143,7 @@ error[E0728]: `await` is only allowed inside `async` functions and blocks
|
|||
LL | fn foo9() -> Result<(), ()> {
|
||||
| ---- this is not `async`
|
||||
LL | let _ = await bar();
|
||||
| ^^^^^^^^^^^ only allowed inside `async` functions and blocks
|
||||
| ^^^^^ only allowed inside `async` functions and blocks
|
||||
|
||||
error[E0728]: `await` is only allowed inside `async` functions and blocks
|
||||
--> $DIR/incorrect-syntax-suggestions.rs:57:13
|
||||
|
|
@ -151,7 +151,7 @@ error[E0728]: `await` is only allowed inside `async` functions and blocks
|
|||
LL | fn foo10() -> Result<(), ()> {
|
||||
| ----- this is not `async`
|
||||
LL | let _ = await? bar();
|
||||
| ^^^^^^^^^^^^ only allowed inside `async` functions and blocks
|
||||
| ^^^^^ only allowed inside `async` functions and blocks
|
||||
|
||||
error[E0728]: `await` is only allowed inside `async` functions and blocks
|
||||
--> $DIR/incorrect-syntax-suggestions.rs:66:14
|
||||
|
|
@ -159,7 +159,7 @@ error[E0728]: `await` is only allowed inside `async` functions and blocks
|
|||
LL | fn foo12() -> Result<(), ()> {
|
||||
| ----- this is not `async`
|
||||
LL | let _ = (await bar())?;
|
||||
| ^^^^^^^^^^^ only allowed inside `async` functions and blocks
|
||||
| ^^^^^ only allowed inside `async` functions and blocks
|
||||
|
||||
error[E0728]: `await` is only allowed inside `async` functions and blocks
|
||||
--> $DIR/incorrect-syntax-suggestions.rs:71:19
|
||||
|
|
@ -215,7 +215,7 @@ error[E0728]: `await` is only allowed inside `async` functions and blocks
|
|||
LL | fn foo() -> Result<(), ()> {
|
||||
| --- this is not `async`
|
||||
LL | let _ = await!(bar())?;
|
||||
| ^^^^^^^^^^^^^ only allowed inside `async` functions and blocks
|
||||
| ^^^^^ only allowed inside `async` functions and blocks
|
||||
|
||||
error[E0728]: `await` is only allowed inside `async` functions and blocks
|
||||
--> $DIR/incorrect-syntax-suggestions.rs:121:17
|
||||
|
|
@ -223,7 +223,7 @@ error[E0728]: `await` is only allowed inside `async` functions and blocks
|
|||
LL | let foo = || {
|
||||
| -- this is not `async`
|
||||
LL | let _ = await!(bar())?;
|
||||
| ^^^^^^^^^^^^^ only allowed inside `async` functions and blocks
|
||||
| ^^^^^ only allowed inside `async` functions and blocks
|
||||
|
||||
error: aborting due to 33 previous errors
|
||||
|
||||
|
|
|
|||
|
|
@ -11,4 +11,24 @@ async fn baz() -> std::io::Result<()> {
|
|||
std::io::Result::Ok(())
|
||||
}
|
||||
|
||||
macro_rules! e {
|
||||
() => {
|
||||
()
|
||||
};
|
||||
}
|
||||
|
||||
macro_rules! f {
|
||||
($expr:expr) => {
|
||||
$expr.await
|
||||
//~^ ERROR `()` is not a future
|
||||
};
|
||||
}
|
||||
|
||||
async fn with_macros() {
|
||||
e!().await;
|
||||
//~^ ERROR `()` is not a future
|
||||
|
||||
f!(());
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
|
|
|||
|
|
@ -19,6 +19,36 @@ help: alternatively, consider making `fn boo` asynchronous
|
|||
LL | async fn boo() {}
|
||||
| +++++
|
||||
|
||||
error: aborting due to previous error
|
||||
error[E0277]: `()` is not a future
|
||||
--> $DIR/unnecessary-await.rs:28:10
|
||||
|
|
||||
LL | e!().await;
|
||||
| -^^^^^
|
||||
| ||
|
||||
| |`()` is not a future
|
||||
| help: remove the `.await`
|
||||
|
|
||||
= help: the trait `Future` is not implemented for `()`
|
||||
= note: () must be a future or must implement `IntoFuture` to be awaited
|
||||
= note: required for `()` to implement `IntoFuture`
|
||||
|
||||
error[E0277]: `()` is not a future
|
||||
--> $DIR/unnecessary-await.rs:22:15
|
||||
|
|
||||
LL | $expr.await
|
||||
| ^^^^^
|
||||
| |
|
||||
| `()` is not a future
|
||||
| remove the `.await`
|
||||
...
|
||||
LL | f!(());
|
||||
| ------ in this macro invocation
|
||||
|
|
||||
= help: the trait `Future` is not implemented for `()`
|
||||
= note: () must be a future or must implement `IntoFuture` to be awaited
|
||||
= note: required for `()` to implement `IntoFuture`
|
||||
= note: this error originates in the macro `f` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue