mirror of
https://github.com/rust-lang/rust-clippy
synced 2024-11-15 01:17:16 +00:00
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.
122 lines
3.5 KiB
Rust
122 lines
3.5 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)]
|
|
//@no-rustfix
|
|
// This tests the branches_sharing_code lint at the start of blocks
|
|
|
|
fn simple_examples() {
|
|
let x = 0;
|
|
|
|
// Simple
|
|
if true {
|
|
println!("Hello World!");
|
|
println!("I'm branch nr: 1");
|
|
} else {
|
|
println!("Hello World!");
|
|
println!("I'm branch nr: 2");
|
|
}
|
|
//~^^^^^^^ ERROR: all if blocks contain the same code at the start
|
|
|
|
// Else if
|
|
if x == 0 {
|
|
let y = 9;
|
|
println!("The value y was set to: `{}`", y);
|
|
let _z = y;
|
|
|
|
println!("I'm the true start index of arrays");
|
|
} else if x == 1 {
|
|
let y = 9;
|
|
println!("The value y was set to: `{}`", y);
|
|
let _z = y;
|
|
|
|
println!("I start counting from 1 so my array starts from `1`");
|
|
} else {
|
|
let y = 9;
|
|
println!("The value y was set to: `{}`", y);
|
|
let _z = y;
|
|
|
|
println!("Ha, Pascal allows you to start the array where you want")
|
|
}
|
|
//~^^^^^^^^^^^^^^^^^^^ ERROR: all if blocks contain the same code at the start
|
|
|
|
// Return a value
|
|
let _ = if x == 7 {
|
|
//~^ ERROR: all if blocks contain the same code at the start
|
|
let y = 16;
|
|
println!("What can I say except: \"you're welcome?\"");
|
|
let _ = y;
|
|
x
|
|
} else {
|
|
let y = 16;
|
|
println!("Thank you");
|
|
y
|
|
};
|
|
}
|
|
|
|
/// Simple examples where the move can cause some problems due to moved values
|
|
fn simple_but_suggestion_is_invalid() {
|
|
let x = 10;
|
|
|
|
// Can't be automatically moved because used_value_name is getting used again
|
|
let used_value_name = 19;
|
|
if x == 10 {
|
|
let used_value_name = "Different type";
|
|
println!("Str: {}", used_value_name);
|
|
let _ = 1;
|
|
} else {
|
|
let used_value_name = "Different type";
|
|
println!("Str: {}", used_value_name);
|
|
let _ = 2;
|
|
}
|
|
//~^^^^^^^^^ ERROR: all if blocks contain the same code at the start
|
|
let _ = used_value_name;
|
|
|
|
// This can be automatically moved as `can_be_overridden` is not used again
|
|
let can_be_overridden = 8;
|
|
let _ = can_be_overridden;
|
|
if x == 11 {
|
|
//~^ ERROR: all if blocks contain the same code at the start
|
|
let can_be_overridden = "Move me";
|
|
println!("I'm also moveable");
|
|
let _ = 111;
|
|
} else {
|
|
let can_be_overridden = "Move me";
|
|
println!("I'm also moveable");
|
|
let _ = 222;
|
|
}
|
|
}
|
|
|
|
/// This function tests that the `IS_SAME_THAN_ELSE` only covers the lint if it's enabled.
|
|
fn check_if_same_than_else_mask() {
|
|
let x = 2021;
|
|
|
|
#[allow(clippy::if_same_then_else)]
|
|
if x == 2020 {
|
|
//~^ ERROR: all if blocks contain the same code at the start
|
|
println!("This should trigger the `SHARED_CODE_IN_IF_BLOCKS` lint.");
|
|
println!("Because `IF_SAME_THEN_ELSE` is allowed here");
|
|
} else {
|
|
println!("This should trigger the `SHARED_CODE_IN_IF_BLOCKS` lint.");
|
|
println!("Because `IF_SAME_THEN_ELSE` is allowed here");
|
|
}
|
|
|
|
if x == 2019 {
|
|
println!("This should trigger `IS_SAME_THAN_ELSE` as usual");
|
|
} else {
|
|
println!("This should trigger `IS_SAME_THAN_ELSE` as usual");
|
|
}
|
|
//~^^^^^ ERROR: this `if` has identical blocks
|
|
}
|
|
|
|
#[allow(clippy::vec_init_then_push)]
|
|
fn pf_local_with_inferred_type_issue7053() {
|
|
if true {
|
|
let mut v = Vec::new();
|
|
v.push(0);
|
|
} else {
|
|
let mut v = Vec::new();
|
|
v.push("");
|
|
};
|
|
}
|
|
|
|
fn main() {}
|