-
Notifications
You must be signed in to change notification settings - Fork 1.6k
/
Copy pathprecedence.fixed
63 lines (56 loc) · 1.24 KB
/
precedence.fixed
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
}