rust/tests/ui/branches_sharing_code/shared_at_top.rs

123 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() {}