2020-01-19 06:04:41 +00:00
|
|
|
#![warn(clippy::if_same_then_else)]
|
|
|
|
#![allow(
|
2022-06-08 19:08:37 +00:00
|
|
|
clippy::disallowed_names,
|
2021-01-04 07:25:38 +00:00
|
|
|
clippy::collapsible_else_if,
|
2021-10-04 06:33:40 +00:00
|
|
|
clippy::equatable_if_let,
|
2020-01-19 06:04:41 +00:00
|
|
|
clippy::collapsible_if,
|
|
|
|
clippy::ifs_same_cond,
|
2023-06-10 11:43:30 +00:00
|
|
|
clippy::needless_if,
|
2020-10-03 20:01:34 +00:00
|
|
|
clippy::needless_return,
|
2020-12-11 22:29:53 +00:00
|
|
|
clippy::single_element_loop,
|
2021-04-01 16:30:47 +00:00
|
|
|
clippy::branches_sharing_code
|
2020-01-19 06:04:41 +00:00
|
|
|
)]
|
|
|
|
|
|
|
|
fn if_same_then_else2() -> Result<&'static str, ()> {
|
|
|
|
if true {
|
2023-04-20 15:19:36 +00:00
|
|
|
//~^ ERROR: this `if` has identical blocks
|
2020-01-19 06:04:41 +00:00
|
|
|
for _ in &[42] {
|
|
|
|
let foo: &Option<_> = &Some::<u8>(42);
|
2021-02-17 15:34:35 +00:00
|
|
|
if foo.is_some() {
|
2020-01-19 06:04:41 +00:00
|
|
|
break;
|
|
|
|
} else {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
for _ in &[42] {
|
2021-02-17 15:34:35 +00:00
|
|
|
let bar: &Option<_> = &Some::<u8>(42);
|
|
|
|
if bar.is_some() {
|
2020-01-19 06:04:41 +00:00
|
|
|
break;
|
|
|
|
} else {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if true {
|
2023-04-20 15:19:36 +00:00
|
|
|
//~^ ERROR: this `if` has identical blocks
|
2020-01-19 06:04:41 +00:00
|
|
|
if let Some(a) = Some(42) {}
|
|
|
|
} else {
|
|
|
|
if let Some(a) = Some(42) {}
|
|
|
|
}
|
|
|
|
|
|
|
|
if true {
|
2023-04-20 15:19:36 +00:00
|
|
|
//~^ ERROR: this `if` has identical blocks
|
2020-01-19 06:04:41 +00:00
|
|
|
if let (1, .., 3) = (1, 2, 3) {}
|
|
|
|
} else {
|
|
|
|
if let (1, .., 3) = (1, 2, 3) {}
|
|
|
|
}
|
|
|
|
|
|
|
|
if true {
|
|
|
|
if let (1, .., 3) = (1, 2, 3) {}
|
|
|
|
} else {
|
|
|
|
if let (.., 3) = (1, 2, 3) {}
|
|
|
|
}
|
|
|
|
|
|
|
|
if true {
|
|
|
|
if let (1, .., 3) = (1, 2, 3) {}
|
|
|
|
} else {
|
|
|
|
if let (.., 4) = (1, 2, 3) {}
|
|
|
|
}
|
|
|
|
|
|
|
|
if true {
|
|
|
|
if let (1, .., 3) = (1, 2, 3) {}
|
|
|
|
} else {
|
|
|
|
if let (.., 1, 3) = (1, 2, 3) {}
|
|
|
|
}
|
|
|
|
|
|
|
|
if true {
|
|
|
|
if let Some(42) = None {}
|
|
|
|
} else {
|
|
|
|
if let Option::Some(42) = None {}
|
|
|
|
}
|
|
|
|
|
|
|
|
if true {
|
|
|
|
if let Some(42) = None::<u8> {}
|
|
|
|
} else {
|
|
|
|
if let Some(42) = None {}
|
|
|
|
}
|
|
|
|
|
|
|
|
if true {
|
|
|
|
if let Some(42) = None::<u8> {}
|
|
|
|
} else {
|
|
|
|
if let Some(42) = None::<u32> {}
|
|
|
|
}
|
|
|
|
|
|
|
|
if true {
|
|
|
|
if let Some(a) = Some(42) {}
|
|
|
|
} else {
|
|
|
|
if let Some(a) = Some(43) {}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Same NaNs
|
|
|
|
let _ = if true {
|
2023-04-20 15:19:36 +00:00
|
|
|
//~^ ERROR: this `if` has identical blocks
|
2020-04-07 22:04:33 +00:00
|
|
|
f32::NAN
|
2020-01-19 06:04:41 +00:00
|
|
|
} else {
|
2020-04-07 22:04:33 +00:00
|
|
|
f32::NAN
|
2020-01-19 06:04:41 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
if true {
|
2023-04-20 15:19:36 +00:00
|
|
|
//~^ ERROR: this `if` has identical blocks
|
2020-01-19 06:04:41 +00:00
|
|
|
Ok("foo")?;
|
|
|
|
} else {
|
|
|
|
Ok("foo")?;
|
|
|
|
}
|
|
|
|
|
|
|
|
if true {
|
|
|
|
let foo = "";
|
|
|
|
return Ok(&foo[0..]);
|
|
|
|
} else if false {
|
|
|
|
let foo = "bar";
|
|
|
|
return Ok(&foo[0..]);
|
|
|
|
} else {
|
|
|
|
let foo = "";
|
|
|
|
return Ok(&foo[0..]);
|
|
|
|
}
|
|
|
|
|
|
|
|
if true {
|
|
|
|
let foo = "";
|
|
|
|
return Ok(&foo[0..]);
|
|
|
|
} else if false {
|
|
|
|
let foo = "bar";
|
|
|
|
return Ok(&foo[0..]);
|
|
|
|
} else if true {
|
2023-04-20 15:19:36 +00:00
|
|
|
//~^ ERROR: this `if` has identical blocks
|
2020-01-19 06:04:41 +00:00
|
|
|
let foo = "";
|
|
|
|
return Ok(&foo[0..]);
|
|
|
|
} else {
|
|
|
|
let foo = "";
|
|
|
|
return Ok(&foo[0..]);
|
|
|
|
}
|
|
|
|
|
|
|
|
// False positive `if_same_then_else`: `let (x, y)` vs. `let (y, x)`; see issue #3559.
|
|
|
|
if true {
|
|
|
|
let foo = "";
|
|
|
|
let (x, y) = (1, 2);
|
|
|
|
return Ok(&foo[x..y]);
|
|
|
|
} else {
|
|
|
|
let foo = "";
|
|
|
|
let (y, x) = (1, 2);
|
|
|
|
return Ok(&foo[x..y]);
|
|
|
|
}
|
2022-01-16 14:46:02 +00:00
|
|
|
|
|
|
|
// Issue #7579
|
|
|
|
let _ = if let Some(0) = None { 0 } else { 0 };
|
|
|
|
|
|
|
|
if true {
|
|
|
|
return Err(());
|
|
|
|
} else if let Some(0) = None {
|
|
|
|
return Err(());
|
|
|
|
}
|
|
|
|
|
|
|
|
let _ = if let Some(0) = None {
|
|
|
|
0
|
|
|
|
} else if let Some(1) = None {
|
|
|
|
0
|
|
|
|
} else {
|
|
|
|
0
|
|
|
|
};
|
2020-01-19 06:04:41 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
fn main() {}
|