543d56938e
This commit: - now makes `HirEqInterExpr::eq_block` take comments into account. Identical code with varying comments will no longer be considered equal. - makes necessary adjustments to UI tests.
162 lines
3.8 KiB
Rust
162 lines
3.8 KiB
Rust
#![deny(clippy::branches_sharing_code, clippy::if_same_then_else)]
|
|
#![allow(dead_code)]
|
|
#![allow(
|
|
clippy::mixed_read_write_in_expression,
|
|
clippy::uninlined_format_args,
|
|
clippy::needless_else
|
|
)]
|
|
|
|
// This tests valid if blocks that shouldn't trigger the lint
|
|
|
|
// Tests with value references are includes in "shared_code_at_bottom.rs"
|
|
|
|
fn valid_examples() {
|
|
let x = 2;
|
|
|
|
// The edge statements are different
|
|
if x == 9 {
|
|
let y = 1 << 5;
|
|
|
|
println!("This is the same: vvv");
|
|
let _z = y;
|
|
println!("The block expression is different");
|
|
|
|
println!("Different end 1");
|
|
} else {
|
|
let y = 1 << 7;
|
|
|
|
println!("This is the same: vvv");
|
|
let _z = y;
|
|
println!("The block expression is different");
|
|
|
|
println!("Different end 2");
|
|
}
|
|
|
|
// No else
|
|
if x == 2 {
|
|
println!("Hello world!");
|
|
println!("Hello back, how are you?");
|
|
|
|
// This is different vvvv
|
|
println!("Howdy stranger =^.^=");
|
|
|
|
println!("Bye Bye World");
|
|
} else if x == 9 {
|
|
println!("Hello world!");
|
|
println!("Hello back, how are you?");
|
|
|
|
// This is different vvvv
|
|
println!("Hello reviewer :D");
|
|
|
|
println!("Bye Bye World");
|
|
}
|
|
|
|
// Overlapping statements only in else if blocks -> Don't lint
|
|
if x == 0 {
|
|
println!("I'm important!")
|
|
} else if x == 17 {
|
|
println!("I share code in else if");
|
|
|
|
println!("x is 17");
|
|
} else {
|
|
println!("I share code in else if");
|
|
|
|
println!("x is nether x nor 17");
|
|
}
|
|
|
|
// Mutability is different
|
|
if x == 13 {
|
|
let mut y = 9;
|
|
println!("Value y is: {}", y);
|
|
y += 16;
|
|
let _z1 = y;
|
|
} else {
|
|
let y = 9;
|
|
println!("Value y is: {}", y);
|
|
let _z2 = y;
|
|
}
|
|
|
|
// Same blocks but at start and bottom so no `if_same_then_else` lint
|
|
if x == 418 {
|
|
let y = 9;
|
|
let z = 8;
|
|
let _ = (x, y, z);
|
|
// Don't tell the programmer, my code is also in the else block
|
|
} else if x == 419 {
|
|
println!("+-----------+");
|
|
println!("| |");
|
|
println!("| O O |");
|
|
println!("| ° |");
|
|
println!("| \\_____/ |");
|
|
println!("| |");
|
|
println!("+-----------+");
|
|
} else {
|
|
let y = 9;
|
|
let z = 8;
|
|
let _ = (x, y, z);
|
|
// I'm so much better than the x == 418 block. Trust me
|
|
}
|
|
|
|
let x = 1;
|
|
if true {
|
|
println!("{}", x);
|
|
} else {
|
|
let x = 2;
|
|
println!("{}", x);
|
|
}
|
|
|
|
// Let's test empty blocks
|
|
if false {
|
|
} else {
|
|
}
|
|
//~^^^ ERROR: this `if` has identical blocks
|
|
}
|
|
|
|
/// This makes sure that the `if_same_then_else` masks the `shared_code_in_if_blocks` lint
|
|
fn trigger_other_lint() {
|
|
let x = 0;
|
|
let y = 1;
|
|
|
|
// Same block
|
|
if x == 0 {
|
|
let u = 19;
|
|
println!("How are u today?");
|
|
let _ = "This is a string";
|
|
} else {
|
|
let u = 19;
|
|
println!("How are u today?");
|
|
let _ = "This is a string";
|
|
}
|
|
//~^^^^^^^^^ ERROR: this `if` has identical blocks
|
|
|
|
// Only same expression
|
|
let _ = if x == 6 { 7 } else { 7 };
|
|
//~^ ERROR: this `if` has identical blocks
|
|
|
|
// Same in else if block
|
|
let _ = if x == 67 {
|
|
println!("Well I'm the most important block");
|
|
"I'm a pretty string"
|
|
} else if x == 68 {
|
|
println!("I'm a doppelgänger");
|
|
|
|
if y == 90 { "=^.^=" } else { ":D" }
|
|
} else {
|
|
println!("I'm a doppelgänger");
|
|
|
|
if y == 90 { "=^.^=" } else { ":D" }
|
|
};
|
|
//~^^^^^^^^^ ERROR: this `if` has identical blocks
|
|
|
|
if x == 0 {
|
|
println!("I'm single");
|
|
} else if x == 68 {
|
|
println!("I'm a doppelgänger");
|
|
} else {
|
|
println!("I'm a doppelgänger");
|
|
}
|
|
//~^^^^^ ERROR: this `if` has identical blocks
|
|
}
|
|
|
|
fn main() {}
|