| #![warn(clippy::match_single_binding)] |
| #![allow( |
| unused, |
| clippy::let_unit_value, |
| clippy::no_effect, |
| clippy::toplevel_ref_arg, |
| clippy::uninlined_format_args, |
| clippy::useless_vec |
| )] |
| |
| struct Point { |
| x: i32, |
| y: i32, |
| } |
| |
| fn coords() -> Point { |
| Point { x: 1, y: 2 } |
| } |
| |
| macro_rules! foo { |
| ($param:expr) => { |
| match $param { |
| _ => println!("whatever"), |
| } |
| }; |
| } |
| |
| fn main() { |
| let a = 1; |
| let b = 2; |
| let c = 3; |
| // Lint |
| let (x, y, z) = (a, b, c); |
| { |
| println!("{} {} {}", x, y, z); |
| } |
| // Lint |
| let (x, y, z) = (a, b, c); |
| println!("{} {} {}", x, y, z); |
| // Ok |
| foo!(a); |
| // Ok |
| match a { |
| 2 => println!("2"), |
| _ => println!("Not 2"), |
| } |
| // Ok |
| let d = Some(5); |
| match d { |
| Some(d) => println!("{}", d), |
| _ => println!("None"), |
| } |
| // Lint |
| println!("whatever"); |
| // Lint |
| { |
| let x = 29; |
| println!("x has a value of {}", x); |
| } |
| // Lint |
| { |
| let e = 5 * a; |
| if e >= 5 { |
| println!("e is superior to 5"); |
| } |
| } |
| // Lint |
| let p = Point { x: 0, y: 7 }; |
| let Point { x, y } = p; |
| println!("Coords: ({}, {})", x, y); |
| // Lint |
| let Point { x: x1, y: y1 } = p; |
| println!("Coords: ({}, {})", x1, y1); |
| // Lint |
| let x = 5; |
| let ref r = x; |
| println!("Got a reference to {}", r); |
| // Lint |
| let mut x = 5; |
| let ref mut mr = x; |
| println!("Got a mutable reference to {}", mr); |
| // Lint |
| let Point { x, y } = coords(); |
| let product = x * y; |
| // Lint |
| let v = vec![Some(1), Some(2), Some(3), Some(4)]; |
| #[allow(clippy::let_and_return)] |
| let _ = v |
| .iter() |
| .map(|i| { |
| let unwrapped = i.unwrap(); |
| unwrapped |
| }) |
| .collect::<Vec<u8>>(); |
| // Ok |
| let x = 1; |
| match x { |
| #[cfg(disabled_feature)] |
| 0 => println!("Disabled branch"), |
| _ => println!("Enabled branch"), |
| } |
| |
| // Ok |
| let x = 1; |
| let y = 1; |
| match match y { |
| 0 => 1, |
| _ => 2, |
| } { |
| #[cfg(disabled_feature)] |
| 0 => println!("Array index start"), |
| _ => println!("Not an array index start"), |
| } |
| |
| // Lint |
| let x = 1; |
| println!("Not an array index start") |
| } |
| |
| fn issue_8723() { |
| let (mut val, idx) = ("a b", 1); |
| |
| let (pre, suf) = val.split_at(idx); |
| val = { |
| println!("{}", pre); |
| suf |
| }; |
| |
| let _ = val; |
| } |
| |
| fn side_effects() {} |
| |
| fn issue_9575() { |
| let _ = || { |
| side_effects(); |
| println!("Needs curlies") |
| }; |
| } |
| |
| fn issue_9725(r: Option<u32>) { |
| let x = r; |
| match x { |
| Some(_) => { |
| println!("Some"); |
| }, |
| None => { |
| println!("None"); |
| }, |
| }; |
| } |
| |
| fn issue_10447() -> usize { |
| (); |
| |
| let a = (); |
| |
| side_effects(); |
| |
| let b = side_effects(); |
| |
| println!("1"); |
| |
| let c = println!("1"); |
| |
| let in_expr = [ |
| (), |
| side_effects(), |
| println!("1"), |
| ]; |
| |
| 2 |
| } |
| |
| fn issue14634() { |
| macro_rules! id { |
| ($i:ident) => { |
| $i |
| }; |
| } |
| dbg!(3); |
| println!("here"); |
| //~^^^ match_single_binding |
| let id!(a) = dbg!(3); |
| println!("found {a}"); |
| //~^^^ match_single_binding |
| let id!(b) = dbg!(3); |
| let id!(_a) = dbg!(b + 1); |
| //~^^^ match_single_binding |
| } |
| |
| mod issue14991 { |
| struct AnnoConstWOBlock { |
| inner: [(); { |
| let _n = 1; |
| 42 |
| }], |
| } |
| |
| struct AnnoConstWBlock { |
| inner: [(); { |
| let _n = 1; |
| 42 |
| }], |
| } |
| } |
| |
| mod issue15018 { |
| fn used_later(a: i32, b: i32, c: i32) { |
| let x = 1; |
| { |
| let (x, y, z) = (a, b, c); |
| println!("{} {} {}", x, y, z); |
| } |
| println!("x = {x}"); |
| } |
| |
| fn not_used_later(a: i32, b: i32, c: i32) { |
| let (x, y, z) = (a, b, c); |
| println!("{} {} {}", x, y, z) |
| } |
| |
| #[allow(irrefutable_let_patterns)] |
| fn not_used_later_but_shadowed(a: i32, b: i32, c: i32) { |
| let (x, y, z) = (a, b, c); |
| println!("{} {} {}", x, y, z); |
| let x = 1; |
| println!("x = {x}"); |
| } |
| |
| #[allow(irrefutable_let_patterns)] |
| fn not_used_later_but_shadowed_nested(a: i32, b: i32, c: i32) { |
| let (x, y, z) = (a, b, c); |
| println!("{} {} {}", x, y, z); |
| if let (x, y, z) = (a, b, c) { |
| println!("{} {} {}", x, y, z) |
| } |
| |
| { |
| let x: i32 = 1; |
| { |
| let (x, y, z) = (a, b, c); |
| println!("{} {} {}", x, y, z); |
| } |
| if let (x, y, z) = (a, x, c) { |
| println!("{} {} {}", x, y, z) |
| } |
| } |
| |
| { |
| let (x, y, z) = (a, b, c); |
| println!("{} {} {}", x, y, z); |
| let fn_ = |y| { |
| println!("{} {} {}", a, b, y); |
| }; |
| fn_(c); |
| } |
| } |
| } |
| |
| #[allow(clippy::short_circuit_statement)] |
| fn issue15269(a: usize, b: usize, c: usize) -> bool { |
| a < b |
| && b < c; |
| |
| a < b |
| && b < c |
| } |