blob: f0252c4484a5a746a722d4d5e3b0b22f38bfd154 [file] [log] [blame] [edit]
#![warn(clippy::precedence)]
#![allow(
unused_must_use,
clippy::no_effect,
clippy::unnecessary_operation,
clippy::clone_on_copy,
clippy::identity_op,
clippy::eq_op
)]
macro_rules! trip {
($a:expr) => {
match $a & 0b1111_1111u8 {
0 => println!("a is zero ({})", $a),
_ => println!("a is {}", $a),
}
};
}
fn main() {
1 << (2 + 3);
//~^ precedence
(1 + 2) << 3;
//~^ precedence
4 >> (1 + 1);
//~^ precedence
(1 + 3) >> 2;
//~^ precedence
1 ^ (1 - 1);
//~^ precedence
3 | (2 - 1);
//~^ precedence
3 & (5 - 2);
//~^ precedence
0x0F00 & 0x00F0 << 4;
0x0F00 & 0xF000 >> 4;
0x0F00 << 1 ^ 3;
0x0F00 << 1 | 2;
let b = 3;
trip!(b * 8);
}
struct W(u8);
impl Clone for W {
fn clone(&self) -> Self {
W(1)
}
}
fn closure_method_call() {
// Do not lint when the method call is applied to the block, both inside the closure
let f = |x: W| { x }.clone();
assert!(matches!(f(W(0)), W(1)));
let f = (|x: W| -> _ { x }).clone();
assert!(matches!(f(W(0)), W(0)));
//~^^ precedence
let f = (move |x: W| -> _ { x }).clone();
assert!(matches!(f(W(0)), W(0)));
//~^^ precedence
}