diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 12:02:58 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 12:02:58 +0000 |
commit | 698f8c2f01ea549d77d7dc3338a12e04c11057b9 (patch) | |
tree | 173a775858bd501c378080a10dca74132f05bc50 /src/tools/clippy/tests/ui/author | |
parent | Initial commit. (diff) | |
download | rustc-698f8c2f01ea549d77d7dc3338a12e04c11057b9.tar.xz rustc-698f8c2f01ea549d77d7dc3338a12e04c11057b9.zip |
Adding upstream version 1.64.0+dfsg1.upstream/1.64.0+dfsg1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/tools/clippy/tests/ui/author')
-rw-r--r-- | src/tools/clippy/tests/ui/author/blocks.rs | 24 | ||||
-rw-r--r-- | src/tools/clippy/tests/ui/author/blocks.stdout | 64 | ||||
-rw-r--r-- | src/tools/clippy/tests/ui/author/call.rs | 4 | ||||
-rw-r--r-- | src/tools/clippy/tests/ui/author/call.stdout | 16 | ||||
-rw-r--r-- | src/tools/clippy/tests/ui/author/if.rs | 17 | ||||
-rw-r--r-- | src/tools/clippy/tests/ui/author/if.stdout | 50 | ||||
-rw-r--r-- | src/tools/clippy/tests/ui/author/issue_3849.rs | 14 | ||||
-rw-r--r-- | src/tools/clippy/tests/ui/author/issue_3849.stdout | 14 | ||||
-rw-r--r-- | src/tools/clippy/tests/ui/author/loop.rs | 36 | ||||
-rw-r--r-- | src/tools/clippy/tests/ui/author/loop.stdout | 113 | ||||
-rw-r--r-- | src/tools/clippy/tests/ui/author/matches.rs | 13 | ||||
-rw-r--r-- | src/tools/clippy/tests/ui/author/matches.stdout | 38 | ||||
-rw-r--r-- | src/tools/clippy/tests/ui/author/repeat.rs | 5 | ||||
-rw-r--r-- | src/tools/clippy/tests/ui/author/repeat.stdout | 12 | ||||
-rw-r--r-- | src/tools/clippy/tests/ui/author/struct.rs | 40 | ||||
-rw-r--r-- | src/tools/clippy/tests/ui/author/struct.stdout | 64 |
16 files changed, 524 insertions, 0 deletions
diff --git a/src/tools/clippy/tests/ui/author/blocks.rs b/src/tools/clippy/tests/ui/author/blocks.rs new file mode 100644 index 000000000..a7335c01b --- /dev/null +++ b/src/tools/clippy/tests/ui/author/blocks.rs @@ -0,0 +1,24 @@ +// edition:2018 + +#![allow(redundant_semicolons, clippy::no_effect)] +#![feature(stmt_expr_attributes)] +#![feature(async_closure)] + +#[rustfmt::skip] +fn main() { + #[clippy::author] + { + let x = 42i32; + let _t = 1f32; + + -x; + }; + #[clippy::author] + { + let expr = String::new(); + drop(expr) + }; + + #[clippy::author] + async move || {}; +} diff --git a/src/tools/clippy/tests/ui/author/blocks.stdout b/src/tools/clippy/tests/ui/author/blocks.stdout new file mode 100644 index 000000000..2fc4a7d1f --- /dev/null +++ b/src/tools/clippy/tests/ui/author/blocks.stdout @@ -0,0 +1,64 @@ +if_chain! { + if let ExprKind::Block(block, None) = expr.kind; + if block.stmts.len() == 3; + if let StmtKind::Local(local) = block.stmts[0].kind; + if let Some(init) = local.init; + if let ExprKind::Lit(ref lit) = init.kind; + if let LitKind::Int(42, LitIntType::Signed(IntTy::I32)) = lit.node; + if let PatKind::Binding(BindingAnnotation::Unannotated, _, name, None) = local.pat.kind; + if name.as_str() == "x"; + if let StmtKind::Local(local1) = block.stmts[1].kind; + if let Some(init1) = local1.init; + if let ExprKind::Lit(ref lit1) = init1.kind; + if let LitKind::Float(_, LitFloatType::Suffixed(FloatTy::F32)) = lit1.node; + if let PatKind::Binding(BindingAnnotation::Unannotated, _, name1, None) = local1.pat.kind; + if name1.as_str() == "_t"; + if let StmtKind::Semi(e) = block.stmts[2].kind; + if let ExprKind::Unary(UnOp::Neg, inner) = e.kind; + if let ExprKind::Path(ref qpath) = inner.kind; + if match_qpath(qpath, &["x"]); + if block.expr.is_none(); + then { + // report your lint here + } +} +if_chain! { + if let ExprKind::Block(block, None) = expr.kind; + if block.stmts.len() == 1; + if let StmtKind::Local(local) = block.stmts[0].kind; + if let Some(init) = local.init; + if let ExprKind::Call(func, args) = init.kind; + if let ExprKind::Path(ref qpath) = func.kind; + if match_qpath(qpath, &["String", "new"]); + if args.is_empty(); + if let PatKind::Binding(BindingAnnotation::Unannotated, _, name, None) = local.pat.kind; + if name.as_str() == "expr"; + if let Some(trailing_expr) = block.expr; + if let ExprKind::Call(func1, args1) = trailing_expr.kind; + if let ExprKind::Path(ref qpath1) = func1.kind; + if match_qpath(qpath1, &["drop"]); + if args1.len() == 1; + if let ExprKind::Path(ref qpath2) = args1[0].kind; + if match_qpath(qpath2, &["expr"]); + then { + // report your lint here + } +} +if_chain! { + if let ExprKind::Closure(CaptureBy::Value, fn_decl, body_id, _, None) = expr.kind; + if let FnRetTy::DefaultReturn(_) = fn_decl.output; + let expr1 = &cx.tcx.hir().body(body_id).value; + if let ExprKind::Call(func, args) = expr1.kind; + if let ExprKind::Path(ref qpath) = func.kind; + if matches!(qpath, QPath::LangItem(LangItem::FromGenerator, _)); + if args.len() == 1; + if let ExprKind::Closure(CaptureBy::Value, fn_decl1, body_id1, _, Some(Movability::Static)) = args[0].kind; + if let FnRetTy::DefaultReturn(_) = fn_decl1.output; + let expr2 = &cx.tcx.hir().body(body_id1).value; + if let ExprKind::Block(block, None) = expr2.kind; + if block.stmts.is_empty(); + if block.expr.is_none(); + then { + // report your lint here + } +} diff --git a/src/tools/clippy/tests/ui/author/call.rs b/src/tools/clippy/tests/ui/author/call.rs new file mode 100644 index 000000000..e99c3c41d --- /dev/null +++ b/src/tools/clippy/tests/ui/author/call.rs @@ -0,0 +1,4 @@ +fn main() { + #[clippy::author] + let _ = ::std::cmp::min(3, 4); +} diff --git a/src/tools/clippy/tests/ui/author/call.stdout b/src/tools/clippy/tests/ui/author/call.stdout new file mode 100644 index 000000000..266312d63 --- /dev/null +++ b/src/tools/clippy/tests/ui/author/call.stdout @@ -0,0 +1,16 @@ +if_chain! { + if let StmtKind::Local(local) = stmt.kind; + if let Some(init) = local.init; + if let ExprKind::Call(func, args) = init.kind; + if let ExprKind::Path(ref qpath) = func.kind; + if match_qpath(qpath, &["{{root}}", "std", "cmp", "min"]); + if args.len() == 2; + if let ExprKind::Lit(ref lit) = args[0].kind; + if let LitKind::Int(3, LitIntType::Unsuffixed) = lit.node; + if let ExprKind::Lit(ref lit1) = args[1].kind; + if let LitKind::Int(4, LitIntType::Unsuffixed) = lit1.node; + if let PatKind::Wild = local.pat.kind; + then { + // report your lint here + } +} diff --git a/src/tools/clippy/tests/ui/author/if.rs b/src/tools/clippy/tests/ui/author/if.rs new file mode 100644 index 000000000..946088ab3 --- /dev/null +++ b/src/tools/clippy/tests/ui/author/if.rs @@ -0,0 +1,17 @@ +#[allow(clippy::all)] + +fn main() { + #[clippy::author] + let _ = if true { + 1 == 1; + } else { + 2 == 2; + }; + + let a = true; + + #[clippy::author] + if let true = a { + } else { + }; +} diff --git a/src/tools/clippy/tests/ui/author/if.stdout b/src/tools/clippy/tests/ui/author/if.stdout new file mode 100644 index 000000000..8d92849b3 --- /dev/null +++ b/src/tools/clippy/tests/ui/author/if.stdout @@ -0,0 +1,50 @@ +if_chain! { + if let StmtKind::Local(local) = stmt.kind; + if let Some(init) = local.init; + if let ExprKind::If(cond, then, Some(else_expr)) = init.kind; + if let ExprKind::DropTemps(expr) = cond.kind; + if let ExprKind::Lit(ref lit) = expr.kind; + if let LitKind::Bool(true) = lit.node; + if let ExprKind::Block(block, None) = then.kind; + if block.stmts.len() == 1; + if let StmtKind::Semi(e) = block.stmts[0].kind; + if let ExprKind::Binary(op, left, right) = e.kind; + if BinOpKind::Eq == op.node; + if let ExprKind::Lit(ref lit1) = left.kind; + if let LitKind::Int(1, LitIntType::Unsuffixed) = lit1.node; + if let ExprKind::Lit(ref lit2) = right.kind; + if let LitKind::Int(1, LitIntType::Unsuffixed) = lit2.node; + if block.expr.is_none(); + if let ExprKind::Block(block1, None) = else_expr.kind; + if block1.stmts.len() == 1; + if let StmtKind::Semi(e1) = block1.stmts[0].kind; + if let ExprKind::Binary(op1, left1, right1) = e1.kind; + if BinOpKind::Eq == op1.node; + if let ExprKind::Lit(ref lit3) = left1.kind; + if let LitKind::Int(2, LitIntType::Unsuffixed) = lit3.node; + if let ExprKind::Lit(ref lit4) = right1.kind; + if let LitKind::Int(2, LitIntType::Unsuffixed) = lit4.node; + if block1.expr.is_none(); + if let PatKind::Wild = local.pat.kind; + then { + // report your lint here + } +} +if_chain! { + if let ExprKind::If(cond, then, Some(else_expr)) = expr.kind; + if let ExprKind::Let(let_expr) = cond.kind; + if let PatKind::Lit(lit_expr) = let_expr.pat.kind; + if let ExprKind::Lit(ref lit) = lit_expr.kind; + if let LitKind::Bool(true) = lit.node; + if let ExprKind::Path(ref qpath) = let_expr.init.kind; + if match_qpath(qpath, &["a"]); + if let ExprKind::Block(block, None) = then.kind; + if block.stmts.is_empty(); + if block.expr.is_none(); + if let ExprKind::Block(block1, None) = else_expr.kind; + if block1.stmts.is_empty(); + if block1.expr.is_none(); + then { + // report your lint here + } +} diff --git a/src/tools/clippy/tests/ui/author/issue_3849.rs b/src/tools/clippy/tests/ui/author/issue_3849.rs new file mode 100644 index 000000000..bae4570e5 --- /dev/null +++ b/src/tools/clippy/tests/ui/author/issue_3849.rs @@ -0,0 +1,14 @@ +#![allow(dead_code)] +#![allow(clippy::zero_ptr)] +#![allow(clippy::transmute_ptr_to_ref)] +#![allow(clippy::transmuting_null)] + +pub const ZPTR: *const usize = 0 as *const _; + +fn main() { + unsafe { + #[clippy::author] + let _: &i32 = std::mem::transmute(ZPTR); + let _: &i32 = std::mem::transmute(0 as *const i32); + } +} diff --git a/src/tools/clippy/tests/ui/author/issue_3849.stdout b/src/tools/clippy/tests/ui/author/issue_3849.stdout new file mode 100644 index 000000000..bce4bc702 --- /dev/null +++ b/src/tools/clippy/tests/ui/author/issue_3849.stdout @@ -0,0 +1,14 @@ +if_chain! { + if let StmtKind::Local(local) = stmt.kind; + if let Some(init) = local.init; + if let ExprKind::Call(func, args) = init.kind; + if let ExprKind::Path(ref qpath) = func.kind; + if match_qpath(qpath, &["std", "mem", "transmute"]); + if args.len() == 1; + if let ExprKind::Path(ref qpath1) = args[0].kind; + if match_qpath(qpath1, &["ZPTR"]); + if let PatKind::Wild = local.pat.kind; + then { + // report your lint here + } +} diff --git a/src/tools/clippy/tests/ui/author/loop.rs b/src/tools/clippy/tests/ui/author/loop.rs new file mode 100644 index 000000000..d6de21631 --- /dev/null +++ b/src/tools/clippy/tests/ui/author/loop.rs @@ -0,0 +1,36 @@ +#![feature(stmt_expr_attributes)] +#![allow(clippy::never_loop, clippy::while_immutable_condition)] + +fn main() { + #[clippy::author] + for y in 0..10 { + let z = y; + } + + #[clippy::author] + for _ in 0..10 { + break; + } + + #[clippy::author] + 'label: for _ in 0..10 { + break 'label; + } + + let a = true; + + #[clippy::author] + while a { + break; + } + + #[clippy::author] + while let true = a { + break; + } + + #[clippy::author] + loop { + break; + } +} diff --git a/src/tools/clippy/tests/ui/author/loop.stdout b/src/tools/clippy/tests/ui/author/loop.stdout new file mode 100644 index 000000000..3d9560f69 --- /dev/null +++ b/src/tools/clippy/tests/ui/author/loop.stdout @@ -0,0 +1,113 @@ +if_chain! { + if let Some(higher::ForLoop { pat: pat, arg: arg, body: body, .. }) = higher::ForLoop::hir(expr); + if let PatKind::Binding(BindingAnnotation::Unannotated, _, name, None) = pat.kind; + if name.as_str() == "y"; + if let ExprKind::Struct(qpath, fields, None) = arg.kind; + if matches!(qpath, QPath::LangItem(LangItem::Range, _)); + if fields.len() == 2; + if fields[0].ident.as_str() == "start"; + if let ExprKind::Lit(ref lit) = fields[0].expr.kind; + if let LitKind::Int(0, LitIntType::Unsuffixed) = lit.node; + if fields[1].ident.as_str() == "end"; + if let ExprKind::Lit(ref lit1) = fields[1].expr.kind; + if let LitKind::Int(10, LitIntType::Unsuffixed) = lit1.node; + if let ExprKind::Block(block, None) = body.kind; + if block.stmts.len() == 1; + if let StmtKind::Local(local) = block.stmts[0].kind; + if let Some(init) = local.init; + if let ExprKind::Path(ref qpath1) = init.kind; + if match_qpath(qpath1, &["y"]); + if let PatKind::Binding(BindingAnnotation::Unannotated, _, name1, None) = local.pat.kind; + if name1.as_str() == "z"; + if block.expr.is_none(); + then { + // report your lint here + } +} +if_chain! { + if let Some(higher::ForLoop { pat: pat, arg: arg, body: body, .. }) = higher::ForLoop::hir(expr); + if let PatKind::Wild = pat.kind; + if let ExprKind::Struct(qpath, fields, None) = arg.kind; + if matches!(qpath, QPath::LangItem(LangItem::Range, _)); + if fields.len() == 2; + if fields[0].ident.as_str() == "start"; + if let ExprKind::Lit(ref lit) = fields[0].expr.kind; + if let LitKind::Int(0, LitIntType::Unsuffixed) = lit.node; + if fields[1].ident.as_str() == "end"; + if let ExprKind::Lit(ref lit1) = fields[1].expr.kind; + if let LitKind::Int(10, LitIntType::Unsuffixed) = lit1.node; + if let ExprKind::Block(block, None) = body.kind; + if block.stmts.len() == 1; + if let StmtKind::Semi(e) = block.stmts[0].kind; + if let ExprKind::Break(destination, None) = e.kind; + if destination.label.is_none(); + if block.expr.is_none(); + then { + // report your lint here + } +} +if_chain! { + if let Some(higher::ForLoop { pat: pat, arg: arg, body: body, .. }) = higher::ForLoop::hir(expr); + if let PatKind::Wild = pat.kind; + if let ExprKind::Struct(qpath, fields, None) = arg.kind; + if matches!(qpath, QPath::LangItem(LangItem::Range, _)); + if fields.len() == 2; + if fields[0].ident.as_str() == "start"; + if let ExprKind::Lit(ref lit) = fields[0].expr.kind; + if let LitKind::Int(0, LitIntType::Unsuffixed) = lit.node; + if fields[1].ident.as_str() == "end"; + if let ExprKind::Lit(ref lit1) = fields[1].expr.kind; + if let LitKind::Int(10, LitIntType::Unsuffixed) = lit1.node; + if let ExprKind::Block(block, None) = body.kind; + if block.stmts.len() == 1; + if let StmtKind::Semi(e) = block.stmts[0].kind; + if let ExprKind::Break(destination, None) = e.kind; + if let Some(label) = destination.label; + if label.ident.as_str() == "'label"; + if block.expr.is_none(); + then { + // report your lint here + } +} +if_chain! { + if let Some(higher::While { condition: condition, body: body }) = higher::While::hir(expr); + if let ExprKind::Path(ref qpath) = condition.kind; + if match_qpath(qpath, &["a"]); + if let ExprKind::Block(block, None) = body.kind; + if block.stmts.len() == 1; + if let StmtKind::Semi(e) = block.stmts[0].kind; + if let ExprKind::Break(destination, None) = e.kind; + if destination.label.is_none(); + if block.expr.is_none(); + then { + // report your lint here + } +} +if_chain! { + if let Some(higher::WhileLet { let_pat: let_pat, let_expr: let_expr, if_then: if_then }) = higher::WhileLet::hir(expr); + if let PatKind::Lit(lit_expr) = let_pat.kind; + if let ExprKind::Lit(ref lit) = lit_expr.kind; + if let LitKind::Bool(true) = lit.node; + if let ExprKind::Path(ref qpath) = let_expr.kind; + if match_qpath(qpath, &["a"]); + if let ExprKind::Block(block, None) = if_then.kind; + if block.stmts.len() == 1; + if let StmtKind::Semi(e) = block.stmts[0].kind; + if let ExprKind::Break(destination, None) = e.kind; + if destination.label.is_none(); + if block.expr.is_none(); + then { + // report your lint here + } +} +if_chain! { + if let ExprKind::Loop(body, None, LoopSource::Loop, _) = expr.kind; + if body.stmts.len() == 1; + if let StmtKind::Semi(e) = body.stmts[0].kind; + if let ExprKind::Break(destination, None) = e.kind; + if destination.label.is_none(); + if body.expr.is_none(); + then { + // report your lint here + } +} diff --git a/src/tools/clippy/tests/ui/author/matches.rs b/src/tools/clippy/tests/ui/author/matches.rs new file mode 100644 index 000000000..674e07ec2 --- /dev/null +++ b/src/tools/clippy/tests/ui/author/matches.rs @@ -0,0 +1,13 @@ +#![allow(clippy::let_and_return)] + +fn main() { + #[clippy::author] + let a = match 42 { + 16 => 5, + 17 => { + let x = 3; + x + }, + _ => 1, + }; +} diff --git a/src/tools/clippy/tests/ui/author/matches.stdout b/src/tools/clippy/tests/ui/author/matches.stdout new file mode 100644 index 000000000..38444a009 --- /dev/null +++ b/src/tools/clippy/tests/ui/author/matches.stdout @@ -0,0 +1,38 @@ +if_chain! { + if let StmtKind::Local(local) = stmt.kind; + if let Some(init) = local.init; + if let ExprKind::Match(scrutinee, arms, MatchSource::Normal) = init.kind; + if let ExprKind::Lit(ref lit) = scrutinee.kind; + if let LitKind::Int(42, LitIntType::Unsuffixed) = lit.node; + if arms.len() == 3; + if let PatKind::Lit(lit_expr) = arms[0].pat.kind; + if let ExprKind::Lit(ref lit1) = lit_expr.kind; + if let LitKind::Int(16, LitIntType::Unsuffixed) = lit1.node; + if arms[0].guard.is_none(); + if let ExprKind::Lit(ref lit2) = arms[0].body.kind; + if let LitKind::Int(5, LitIntType::Unsuffixed) = lit2.node; + if let PatKind::Lit(lit_expr1) = arms[1].pat.kind; + if let ExprKind::Lit(ref lit3) = lit_expr1.kind; + if let LitKind::Int(17, LitIntType::Unsuffixed) = lit3.node; + if arms[1].guard.is_none(); + if let ExprKind::Block(block, None) = arms[1].body.kind; + if block.stmts.len() == 1; + if let StmtKind::Local(local1) = block.stmts[0].kind; + if let Some(init1) = local1.init; + if let ExprKind::Lit(ref lit4) = init1.kind; + if let LitKind::Int(3, LitIntType::Unsuffixed) = lit4.node; + if let PatKind::Binding(BindingAnnotation::Unannotated, _, name, None) = local1.pat.kind; + if name.as_str() == "x"; + if let Some(trailing_expr) = block.expr; + if let ExprKind::Path(ref qpath) = trailing_expr.kind; + if match_qpath(qpath, &["x"]); + if let PatKind::Wild = arms[2].pat.kind; + if arms[2].guard.is_none(); + if let ExprKind::Lit(ref lit5) = arms[2].body.kind; + if let LitKind::Int(1, LitIntType::Unsuffixed) = lit5.node; + if let PatKind::Binding(BindingAnnotation::Unannotated, _, name1, None) = local.pat.kind; + if name1.as_str() == "a"; + then { + // report your lint here + } +} diff --git a/src/tools/clippy/tests/ui/author/repeat.rs b/src/tools/clippy/tests/ui/author/repeat.rs new file mode 100644 index 000000000..d8e9d589e --- /dev/null +++ b/src/tools/clippy/tests/ui/author/repeat.rs @@ -0,0 +1,5 @@ +#[allow(clippy::no_effect)] +fn main() { + #[clippy::author] + [1_u8; 5]; +} diff --git a/src/tools/clippy/tests/ui/author/repeat.stdout b/src/tools/clippy/tests/ui/author/repeat.stdout new file mode 100644 index 000000000..471bbce4f --- /dev/null +++ b/src/tools/clippy/tests/ui/author/repeat.stdout @@ -0,0 +1,12 @@ +if_chain! { + if let ExprKind::Repeat(value, length) = expr.kind; + if let ExprKind::Lit(ref lit) = value.kind; + if let LitKind::Int(1, LitIntType::Unsigned(UintTy::U8)) = lit.node; + if let ArrayLen::Body(anon_const) = length; + let expr1 = &cx.tcx.hir().body(anon_const.body).value; + if let ExprKind::Lit(ref lit1) = expr1.kind; + if let LitKind::Int(5, LitIntType::Unsuffixed) = lit1.node; + then { + // report your lint here + } +} diff --git a/src/tools/clippy/tests/ui/author/struct.rs b/src/tools/clippy/tests/ui/author/struct.rs new file mode 100644 index 000000000..5fdf3433a --- /dev/null +++ b/src/tools/clippy/tests/ui/author/struct.rs @@ -0,0 +1,40 @@ +#[allow(clippy::unnecessary_operation, clippy::single_match)] +fn main() { + struct Test { + field: u32, + } + + #[clippy::author] + Test { + field: if true { 1 } else { 0 }, + }; + + let test = Test { field: 1 }; + + match test { + #[clippy::author] + Test { field: 1 } => {}, + _ => {}, + } + + struct TestTuple(u32); + + let test_tuple = TestTuple(1); + + match test_tuple { + #[clippy::author] + TestTuple(1) => {}, + _ => {}, + } + + struct TestMethodCall(u32); + + impl TestMethodCall { + fn test(&self) {} + } + + let test_method_call = TestMethodCall(1); + + #[clippy::author] + test_method_call.test(); +} diff --git a/src/tools/clippy/tests/ui/author/struct.stdout b/src/tools/clippy/tests/ui/author/struct.stdout new file mode 100644 index 000000000..5e78b7c9d --- /dev/null +++ b/src/tools/clippy/tests/ui/author/struct.stdout @@ -0,0 +1,64 @@ +if_chain! { + if let ExprKind::Struct(qpath, fields, None) = expr.kind; + if match_qpath(qpath, &["Test"]); + if fields.len() == 1; + if fields[0].ident.as_str() == "field"; + if let ExprKind::If(cond, then, Some(else_expr)) = fields[0].expr.kind; + if let ExprKind::DropTemps(expr1) = cond.kind; + if let ExprKind::Lit(ref lit) = expr1.kind; + if let LitKind::Bool(true) = lit.node; + if let ExprKind::Block(block, None) = then.kind; + if block.stmts.is_empty(); + if let Some(trailing_expr) = block.expr; + if let ExprKind::Lit(ref lit1) = trailing_expr.kind; + if let LitKind::Int(1, LitIntType::Unsuffixed) = lit1.node; + if let ExprKind::Block(block1, None) = else_expr.kind; + if block1.stmts.is_empty(); + if let Some(trailing_expr1) = block1.expr; + if let ExprKind::Lit(ref lit2) = trailing_expr1.kind; + if let LitKind::Int(0, LitIntType::Unsuffixed) = lit2.node; + then { + // report your lint here + } +} +if_chain! { + if let PatKind::Struct(ref qpath, fields, false) = arm.pat.kind; + if match_qpath(qpath, &["Test"]); + if fields.len() == 1; + if fields[0].ident.as_str() == "field"; + if let PatKind::Lit(lit_expr) = fields[0].pat.kind; + if let ExprKind::Lit(ref lit) = lit_expr.kind; + if let LitKind::Int(1, LitIntType::Unsuffixed) = lit.node; + if arm.guard.is_none(); + if let ExprKind::Block(block, None) = arm.body.kind; + if block.stmts.is_empty(); + if block.expr.is_none(); + then { + // report your lint here + } +} +if_chain! { + if let PatKind::TupleStruct(ref qpath, fields, None) = arm.pat.kind; + if match_qpath(qpath, &["TestTuple"]); + if fields.len() == 1; + if let PatKind::Lit(lit_expr) = fields[0].kind; + if let ExprKind::Lit(ref lit) = lit_expr.kind; + if let LitKind::Int(1, LitIntType::Unsuffixed) = lit.node; + if arm.guard.is_none(); + if let ExprKind::Block(block, None) = arm.body.kind; + if block.stmts.is_empty(); + if block.expr.is_none(); + then { + // report your lint here + } +} +if_chain! { + if let ExprKind::MethodCall(method_name, args, _) = expr.kind; + if method_name.ident.as_str() == "test"; + if args.len() == 1; + if let ExprKind::Path(ref qpath) = args[0].kind; + if match_qpath(qpath, &["test_method_call"]); + then { + // report your lint here + } +} |