242 lines
3.8 KiB
Rust
242 lines
3.8 KiB
Rust
#![allow(dead_code)]
|
|
#![warn(clippy::comparison_chain)]
|
|
|
|
fn a() {}
|
|
fn b() {}
|
|
fn c() {}
|
|
|
|
fn f(x: u8, y: u8, z: u8) {
|
|
// Ignored: Only one branch
|
|
if x > y {
|
|
a()
|
|
}
|
|
|
|
if x > y {
|
|
//~^ ERROR: `if` chain can be rewritten with `match`
|
|
a()
|
|
} else if x < y {
|
|
b()
|
|
}
|
|
|
|
// Ignored: Only one explicit conditional
|
|
if x > y {
|
|
a()
|
|
} else {
|
|
b()
|
|
}
|
|
|
|
if x > y {
|
|
//~^ ERROR: `if` chain can be rewritten with `match`
|
|
a()
|
|
} else if x < y {
|
|
b()
|
|
} else {
|
|
c()
|
|
}
|
|
|
|
if x > y {
|
|
//~^ ERROR: `if` chain can be rewritten with `match`
|
|
a()
|
|
} else if y > x {
|
|
b()
|
|
} else {
|
|
c()
|
|
}
|
|
|
|
if x > 1 {
|
|
//~^ ERROR: `if` chain can be rewritten with `match`
|
|
a()
|
|
} else if x < 1 {
|
|
b()
|
|
} else if x == 1 {
|
|
c()
|
|
}
|
|
|
|
// Ignored: Binop args are not equivalent
|
|
if x > 1 {
|
|
a()
|
|
} else if y > 1 {
|
|
b()
|
|
} else {
|
|
c()
|
|
}
|
|
|
|
// Ignored: Binop args are not equivalent
|
|
if x > y {
|
|
a()
|
|
} else if x > z {
|
|
b()
|
|
} else if y > z {
|
|
c()
|
|
}
|
|
|
|
// Ignored: Not binary comparisons
|
|
if true {
|
|
a()
|
|
} else if false {
|
|
b()
|
|
} else {
|
|
c()
|
|
}
|
|
}
|
|
|
|
#[allow(clippy::float_cmp)]
|
|
fn g(x: f64, y: f64, z: f64) {
|
|
// Ignored: f64 doesn't implement Ord
|
|
if x > y {
|
|
a()
|
|
} else if x < y {
|
|
b()
|
|
}
|
|
|
|
// Ignored: f64 doesn't implement Ord
|
|
if x > y {
|
|
a()
|
|
} else if x < y {
|
|
b()
|
|
} else {
|
|
c()
|
|
}
|
|
|
|
// Ignored: f64 doesn't implement Ord
|
|
if x > y {
|
|
a()
|
|
} else if y > x {
|
|
b()
|
|
} else {
|
|
c()
|
|
}
|
|
|
|
// Ignored: f64 doesn't implement Ord
|
|
if x > 1.0 {
|
|
a()
|
|
} else if x < 1.0 {
|
|
b()
|
|
} else if x == 1.0 {
|
|
c()
|
|
}
|
|
}
|
|
|
|
fn h<T: Ord>(x: T, y: T, z: T) {
|
|
if x > y {
|
|
//~^ ERROR: `if` chain can be rewritten with `match`
|
|
a()
|
|
} else if x < y {
|
|
b()
|
|
}
|
|
|
|
if x > y {
|
|
//~^ ERROR: `if` chain can be rewritten with `match`
|
|
a()
|
|
} else if x < y {
|
|
b()
|
|
} else {
|
|
c()
|
|
}
|
|
|
|
if x > y {
|
|
//~^ ERROR: `if` chain can be rewritten with `match`
|
|
a()
|
|
} else if y > x {
|
|
b()
|
|
} else {
|
|
c()
|
|
}
|
|
}
|
|
|
|
// The following uses should be ignored
|
|
mod issue_5212 {
|
|
use super::{a, b, c};
|
|
fn foo() -> u8 {
|
|
21
|
|
}
|
|
|
|
fn same_operation_equals() {
|
|
// operands are fixed
|
|
|
|
if foo() == 42 {
|
|
a()
|
|
} else if foo() == 42 {
|
|
b()
|
|
}
|
|
|
|
if foo() == 42 {
|
|
a()
|
|
} else if foo() == 42 {
|
|
b()
|
|
} else {
|
|
c()
|
|
}
|
|
|
|
// operands are transposed
|
|
|
|
if foo() == 42 {
|
|
a()
|
|
} else if 42 == foo() {
|
|
b()
|
|
}
|
|
}
|
|
|
|
fn same_operation_not_equals() {
|
|
// operands are fixed
|
|
|
|
if foo() > 42 {
|
|
a()
|
|
} else if foo() > 42 {
|
|
b()
|
|
}
|
|
|
|
if foo() > 42 {
|
|
a()
|
|
} else if foo() > 42 {
|
|
b()
|
|
} else {
|
|
c()
|
|
}
|
|
|
|
if foo() < 42 {
|
|
a()
|
|
} else if foo() < 42 {
|
|
b()
|
|
}
|
|
|
|
if foo() < 42 {
|
|
a()
|
|
} else if foo() < 42 {
|
|
b()
|
|
} else {
|
|
c()
|
|
}
|
|
}
|
|
}
|
|
|
|
enum Sign {
|
|
Negative,
|
|
Positive,
|
|
Zero,
|
|
}
|
|
|
|
impl Sign {
|
|
const fn sign_i8(n: i8) -> Self {
|
|
if n == 0 {
|
|
Sign::Zero
|
|
} else if n > 0 {
|
|
Sign::Positive
|
|
} else {
|
|
Sign::Negative
|
|
}
|
|
}
|
|
}
|
|
|
|
const fn sign_i8(n: i8) -> Sign {
|
|
if n == 0 {
|
|
Sign::Zero
|
|
} else if n > 0 {
|
|
Sign::Positive
|
|
} else {
|
|
Sign::Negative
|
|
}
|
|
}
|
|
|
|
fn main() {}
|