#![warn(clippy::ifs_same_cond)] #![allow( clippy::if_same_then_else, clippy::comparison_chain, clippy::needless_if, clippy::needless_else )] // all empty blocks fn ifs_same_cond() { let a = 0; let b = false; if b { } else if b { //~^ ERROR: this `if` has the same condition as a previous `if` } if a == 1 { } else if a == 1 { //~^ ERROR: this `if` has the same condition as a previous `if` } if 2 * a == 1 { } else if 2 * a == 2 { } else if 2 * a == 1 { //~^ ERROR: this `if` has the same condition as a previous `if` } else if a == 1 { } // See #659 if cfg!(feature = "feature1-659") { 1 } else if cfg!(feature = "feature2-659") { 2 } else { 3 }; let mut v = vec![1]; if v.pop().is_none() { // ok, functions } else if v.pop().is_none() { } if v.len() == 42 { // ok, functions } else if v.len() == 42 { } if let Some(env1) = option_env!("ENV1") { } else if let Some(env2) = option_env!("ENV2") { } } fn issue10272() { let a = String::from("ha"); if a.contains("ah") { } else if a.contains("ah") { //~^ ERROR: this `if` has the same condition as a previous `if` // Trigger this lint } else if a.contains("ha") { } else if a == "wow" { } let p: *mut i8 = std::ptr::null_mut(); if p.is_null() { } else if p.align_offset(0) == 0 { } else if p.is_null() { // ok, p is mutable pointer } else { } let x = std::cell::Cell::new(true); if x.get() { } else if !x.take() { } else if x.get() { // ok, x is interior mutable type } else { } } fn main() {}