]> git.lizzy.rs Git - rust.git/blob - src/tools/clippy/tests/ui/let_unit.rs
Auto merge of #84620 - Dylan-DPC:rollup-wkv97im, r=Dylan-DPC
[rust.git] / src / tools / clippy / tests / ui / let_unit.rs
1 // run-rustfix
2
3 #![warn(clippy::let_unit_value)]
4 #![allow(clippy::no_effect)]
5 #![allow(unused_variables)]
6
7 macro_rules! let_and_return {
8     ($n:expr) => {{
9         let ret = $n;
10     }};
11 }
12
13 fn main() {
14     let _x = println!("x");
15     let _y = 1; // this is fine
16     let _z = ((), 1); // this as well
17     if true {
18         let _a = ();
19     }
20
21     consume_units_with_for_loop(); // should be fine as well
22
23     multiline_sugg();
24
25     let_and_return!(()) // should be fine
26 }
27
28 // Related to issue #1964
29 fn consume_units_with_for_loop() {
30     // `for_let_unit` lint should not be triggered by consuming them using for loop.
31     let v = vec![(), (), ()];
32     let mut count = 0;
33     for _ in v {
34         count += 1;
35     }
36     assert_eq!(count, 3);
37
38     // Same for consuming from some other Iterator<Item = ()>.
39     let (tx, rx) = ::std::sync::mpsc::channel();
40     tx.send(()).unwrap();
41     drop(tx);
42
43     count = 0;
44     for _ in rx.iter() {
45         count += 1;
46     }
47     assert_eq!(count, 1);
48 }
49
50 fn multiline_sugg() {
51     let v: Vec<u8> = vec![2];
52
53     let _ = v
54         .into_iter()
55         .map(|i| i * 2)
56         .filter(|i| i % 2 == 0)
57         .map(|_| ())
58         .next()
59         .unwrap();
60 }
61
62 #[derive(Copy, Clone)]
63 pub struct ContainsUnit(()); // should be fine