// run-rustfix #![warn(clippy::needless_match)] #![allow(clippy::manual_map)] #![allow(dead_code)] #[derive(Clone, Copy)] enum Choice { A, B, C, D, } #[allow(unused_mut)] fn useless_match() { let mut i = 10; let _: i32 = match i { 0 => 0, 1 => 1, 2 => 2, _ => i, }; let _: i32 = match i { 0 => 0, 1 => 1, ref i => *i, }; let mut _i_mut = match i { 0 => 0, 1 => 1, ref mut i => *i, }; let s = "test"; let _: &str = match s { "a" => "a", "b" => "b", s => s, }; } fn custom_type_match(se: Choice) { let _: Choice = match se { Choice::A => Choice::A, Choice::B => Choice::B, Choice::C => Choice::C, Choice::D => Choice::D, }; // Don't trigger let _: Choice = match se { Choice::A => Choice::A, Choice::B => Choice::B, _ => Choice::C, }; // Mingled, don't trigger let _: Choice = match se { Choice::A => Choice::B, Choice::B => Choice::C, Choice::C => Choice::D, Choice::D => Choice::A, }; } fn option_match(x: Option) { let _: Option = match x { Some(a) => Some(a), None => None, }; // Don't trigger, this is the case for manual_map_option let _: Option = match x { Some(a) => Some(-a), None => None, }; } fn func_ret_err(err: T) -> Result { Err(err) } fn result_match() { let _: Result = match Ok(1) { Ok(a) => Ok(a), Err(err) => Err(err), }; let _: Result = match func_ret_err(0_i32) { Err(err) => Err(err), Ok(a) => Ok(a), }; } fn if_let_option() -> Option { if let Some(a) = Some(1) { Some(a) } else { None } } fn if_let_result(x: Result<(), i32>) { let _: Result<(), i32> = if let Err(e) = x { Err(e) } else { x }; let _: Result<(), i32> = if let Ok(val) = x { Ok(val) } else { x }; // Input type mismatch, don't trigger let _: Result<(), i32> = if let Err(e) = Ok(1) { Err(e) } else { x }; } fn if_let_custom_enum(x: Choice) { let _: Choice = if let Choice::A = x { Choice::A } else if let Choice::B = x { Choice::B } else if let Choice::C = x { Choice::C } else { x }; // Don't trigger let _: Choice = if let Choice::A = x { Choice::A } else if true { Choice::B } else { x }; } fn main() {}