rust/tests/ui/needless_if.fixed
J-ZhengLi 40b558af76 rename [blocks_in_if_conditions] to [blocks_in_conditions];
add more test cases with `match`;
minor fixes in message output regarding review feedback
2023-11-30 15:41:54 +08:00

102 lines
1.8 KiB
Rust

//@aux-build:proc_macros.rs
#![feature(let_chains)]
#![allow(
clippy::blocks_in_conditions,
clippy::if_same_then_else,
clippy::ifs_same_cond,
clippy::let_unit_value,
clippy::needless_else,
clippy::no_effect,
clippy::nonminimal_bool,
clippy::short_circuit_statement,
clippy::unnecessary_operation,
unused
)]
#![warn(clippy::needless_if)]
extern crate proc_macros;
use proc_macros::{external, with_span};
fn maybe_side_effect() -> bool {
true
}
fn main() {
// Lint
// Do not remove the condition
maybe_side_effect();
// Do not lint
if (true) {
} else {
}
({
return;
});
// Do not lint if `else if` is present
if (true) {
} else if (true) {
}
// Do not lint `if let` or let chains
if let true = true {}
if let true = true
&& true
{}
if true
&& let true = true
{}
// Can lint nested `if let`s
({
if let true = true
&& true
{
true
} else {
false
}
} && true);
external! { if (true) {} }
with_span! {
span
if (true) {}
}
if true {
// comment
}
if true {
#[cfg(any())]
foo;
}
macro_rules! empty_expansion {
() => {};
}
if true {
empty_expansion!();
}
macro_rules! empty_repetition {
($($t:tt)*) => {
if true {
$($t)*
}
}
}
empty_repetition!();
// Must be placed into an expression context to not be interpreted as a block
({ maybe_side_effect() });
// Would be a block followed by `&&true` - a double reference to `true`
({ maybe_side_effect() } && true);
// Don't leave trailing attributes
#[allow(unused)]
true;
let () = if maybe_side_effect() {};
}