// run-rustfix #![warn(clippy::match_single_binding)] #![allow(unused_variables, clippy::many_single_char_names, clippy::toplevel_ref_arg)] 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::>(); // Ok let x = 1; match x { #[cfg(disabled_feature)] 0 => println!("Disabled branch"), _ => println!("Enabled branch"), } // Lint let x = 1; let y = 1; println!("Single 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"), } // False negative let x = 1; match x { // => _ => println!("Not an array index start"), } // Lint (additional curly braces needed, see #6572) struct AppendIter where I: Iterator, { inner: Option<(I, ::Item)>, } #[allow(dead_code)] fn size_hint(iter: &AppendIter) -> (usize, Option) { match &iter.inner { Some((iter, _item)) => { let (min, max) = iter.size_hint(); (min.saturating_add(1), max.and_then(|max| max.checked_add(1))) }, None => (0, Some(0)), } } // Lint (no additional curly braces needed) let opt = Some((5, 2)); let get_tup = || -> (i32, i32) { (1, 2) }; match opt { #[rustfmt::skip] Some((first, _second)) => { let (a, b) = get_tup(); println!("a {:?} and b {:?}", a, b); }, None => println!("nothing"), } }