rust-clippy/tests/ui/if_same_then_else2.rs

144 lines
2.9 KiB
Rust
Raw Normal View History

2020-01-19 06:04:41 +00:00
#![warn(clippy::if_same_then_else)]
#![allow(
clippy::blacklisted_name,
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,
clippy::needless_return,
clippy::single_element_loop,
clippy::branches_sharing_code
2020-01-19 06:04:41 +00:00
)]
fn if_same_then_else2() -> Result<&'static str, ()> {
if true {
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 {
//~ ERROR same body as `if` block
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 {
if let Some(a) = Some(42) {}
} else {
//~ ERROR same body as `if` block
if let Some(a) = Some(42) {}
}
if true {
if let (1, .., 3) = (1, 2, 3) {}
} else {
//~ ERROR same body as `if` block
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 {
f32::NAN
2020-01-19 06:04:41 +00:00
} else {
//~ ERROR same body as `if` block
f32::NAN
2020-01-19 06:04:41 +00:00
};
if true {
Ok("foo")?;
} else {
//~ ERROR same body as `if` block
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 {
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]);
}
}
fn main() {}