-
Notifications
You must be signed in to change notification settings - Fork 1.6k
/
Copy pathprecedence.rs
63 lines (56 loc) · 1.22 KB
/
precedence.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#![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
}