Skip to content

Commit

Permalink
add test case with a proc macro fake_desugar_await
Browse files Browse the repository at this point in the history
  • Loading branch information
J-ZhengLi committed Feb 10, 2024
1 parent 28443e6 commit 92537a0
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 5 deletions.
20 changes: 20 additions & 0 deletions tests/ui/auxiliary/proc_macro_attr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -125,3 +125,23 @@ pub fn fake_main(_attr: TokenStream, item: TokenStream) -> TokenStream {
}
.into()
}

#[proc_macro_attribute]
pub fn fake_desugar_await(_args: TokenStream, input: TokenStream) -> TokenStream {
let mut async_fn = syn::parse_macro_input!(input as syn::ItemFn);

for stmt in &mut async_fn.block.stmts {
if let syn::Stmt::Expr(syn::Expr::Match(syn::ExprMatch { expr: scrutinee, .. }), _) = stmt {
if let syn::Expr::Await(syn::ExprAwait { base, await_token, .. }) = scrutinee.as_mut() {
let blc = quote_spanned!( await_token.span => {
#[allow(clippy::let_and_return)]
let __pinned = #base;
__pinned
});
*scrutinee = parse_quote!(#blc);
}
}
}

quote!(#async_fn).into()
}
13 changes: 13 additions & 0 deletions tests/ui/blocks_in_conditions.fixed
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
//@aux-build:proc_macro_attr.rs

#![warn(clippy::blocks_in_conditions)]
#![allow(unused, clippy::let_and_return, clippy::needless_if)]
#![warn(clippy::nonminimal_bool)]
Expand Down Expand Up @@ -99,4 +101,15 @@ fn issue_12162() {
}
}

mod issue_12016 {
#[proc_macro_attr::fake_desugar_await]
pub async fn await_becomes_block() -> i32 {
let res = await; match res {
Some(1) => 2,
Some(2) => 3,
_ => 0,
}
}
}

fn main() {}
13 changes: 13 additions & 0 deletions tests/ui/blocks_in_conditions.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
//@aux-build:proc_macro_attr.rs

#![warn(clippy::blocks_in_conditions)]
#![allow(unused, clippy::let_and_return, clippy::needless_if)]
#![warn(clippy::nonminimal_bool)]
Expand Down Expand Up @@ -99,4 +101,15 @@ fn issue_12162() {
}
}

mod issue_12016 {
#[proc_macro_attr::fake_desugar_await]
pub async fn await_becomes_block() -> i32 {
match Some(1).await {
Some(1) => 2,
Some(2) => 3,
_ => 0,
}
}
}

fn main() {}
16 changes: 11 additions & 5 deletions tests/ui/blocks_in_conditions.stderr
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
error: in an `if` condition, avoid complex blocks or closures with blocks; instead, move the block or closure higher and bind it with a `let`
--> $DIR/blocks_in_conditions.rs:23:5
--> $DIR/blocks_in_conditions.rs:25:5
|
LL | / if {
LL | |
Expand All @@ -20,13 +20,13 @@ LL ~ }; if res {
|

error: omit braces around single expression condition
--> $DIR/blocks_in_conditions.rs:35:8
--> $DIR/blocks_in_conditions.rs:37:8
|
LL | if { true } { 6 } else { 10 }
| ^^^^^^^^ help: try: `true`

error: this boolean expression can be simplified
--> $DIR/blocks_in_conditions.rs:41:8
--> $DIR/blocks_in_conditions.rs:43:8
|
LL | if true && x == 3 { 6 } else { 10 }
| ^^^^^^^^^^^^^^ help: try: `x == 3`
Expand All @@ -35,7 +35,7 @@ LL | if true && x == 3 { 6 } else { 10 }
= help: to override `-D warnings` add `#[allow(clippy::nonminimal_bool)]`

error: in a `match` scrutinee, avoid complex blocks or closures with blocks; instead, move the block or closure higher and bind it with a `let`
--> $DIR/blocks_in_conditions.rs:68:5
--> $DIR/blocks_in_conditions.rs:70:5
|
LL | / match {
LL | |
Expand All @@ -53,5 +53,11 @@ LL + opt
LL ~ }; match res {
|

error: aborting due to 4 previous errors
error: in a `match` scrutinee, avoid complex blocks or closures with blocks; instead, move the block or closure higher and bind it with a `let`
--> $DIR/blocks_in_conditions.rs:107:9
|
LL | match Some(1).await {
| ^^^^^^^^^^^^^^^^^^^ help: try: `let res = await; match res`

error: aborting due to 5 previous errors

0 comments on commit 92537a0

Please sign in to comment.