2022-04-09 23:54:41 -05:00
|
|
|
#![feature(adt_const_params)]
|
|
|
|
#![allow(incomplete_features)]
|
2019-11-13 23:06:34 -06:00
|
|
|
#![warn(clippy::same_functions_in_if_condition)]
|
|
|
|
#![allow(clippy::ifs_same_cond)] // This warning is different from `ifs_same_cond`.
|
|
|
|
#![allow(clippy::if_same_then_else, clippy::comparison_chain)] // all empty blocks
|
|
|
|
|
|
|
|
fn function() -> bool {
|
|
|
|
true
|
|
|
|
}
|
|
|
|
|
|
|
|
fn fn_arg(_arg: u8) -> bool {
|
|
|
|
true
|
|
|
|
}
|
|
|
|
|
|
|
|
struct Struct;
|
|
|
|
|
|
|
|
impl Struct {
|
|
|
|
fn method(&self) -> bool {
|
|
|
|
true
|
|
|
|
}
|
|
|
|
fn method_arg(&self, _arg: u8) -> bool {
|
|
|
|
true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
fn ifs_same_cond_fn() {
|
|
|
|
let a = 0;
|
|
|
|
let obj = Struct;
|
|
|
|
|
|
|
|
if function() {
|
|
|
|
} else if function() {
|
|
|
|
//~ ERROR ifs same condition
|
|
|
|
}
|
|
|
|
|
|
|
|
if fn_arg(a) {
|
|
|
|
} else if fn_arg(a) {
|
|
|
|
//~ ERROR ifs same condition
|
|
|
|
}
|
|
|
|
|
|
|
|
if obj.method() {
|
|
|
|
} else if obj.method() {
|
|
|
|
//~ ERROR ifs same condition
|
|
|
|
}
|
|
|
|
|
|
|
|
if obj.method_arg(a) {
|
|
|
|
} else if obj.method_arg(a) {
|
|
|
|
//~ ERROR ifs same condition
|
|
|
|
}
|
|
|
|
|
|
|
|
let mut v = vec![1];
|
2022-08-03 15:13:06 -05:00
|
|
|
if v.pop().is_none() {
|
2019-11-13 23:06:34 -06:00
|
|
|
//~ ERROR ifs same condition
|
2022-08-03 15:13:06 -05:00
|
|
|
} else if v.pop().is_none() {
|
2019-11-13 23:06:34 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
if v.len() == 42 {
|
|
|
|
//~ ERROR ifs same condition
|
|
|
|
} else if v.len() == 42 {
|
|
|
|
}
|
|
|
|
|
|
|
|
if v.len() == 1 {
|
|
|
|
// ok, different conditions
|
|
|
|
} else if v.len() == 2 {
|
|
|
|
}
|
|
|
|
|
|
|
|
if fn_arg(0) {
|
|
|
|
// ok, different arguments.
|
|
|
|
} else if fn_arg(1) {
|
|
|
|
}
|
|
|
|
|
|
|
|
if obj.method_arg(0) {
|
|
|
|
// ok, different arguments.
|
|
|
|
} else if obj.method_arg(1) {
|
|
|
|
}
|
|
|
|
|
|
|
|
if a == 1 {
|
|
|
|
// ok, warning is on `ifs_same_cond` behalf.
|
|
|
|
} else if a == 1 {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-10-13 04:17:51 -05:00
|
|
|
fn main() {
|
|
|
|
// macro as condition (see #6168)
|
|
|
|
let os = if cfg!(target_os = "macos") {
|
|
|
|
"macos"
|
|
|
|
} else if cfg!(target_os = "windows") {
|
|
|
|
"windows"
|
|
|
|
} else {
|
|
|
|
"linux"
|
|
|
|
};
|
|
|
|
println!("{}", os);
|
2022-04-09 23:54:41 -05:00
|
|
|
|
|
|
|
#[derive(PartialEq, Eq)]
|
|
|
|
enum E {
|
|
|
|
A,
|
|
|
|
B,
|
|
|
|
}
|
|
|
|
fn generic<const P: E>() -> bool {
|
|
|
|
match P {
|
|
|
|
E::A => true,
|
|
|
|
E::B => false,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if generic::<{ E::A }>() {
|
|
|
|
println!("A");
|
|
|
|
} else if generic::<{ E::B }>() {
|
|
|
|
println!("B");
|
|
|
|
}
|
2020-10-13 04:17:51 -05:00
|
|
|
}
|