]> git.lizzy.rs Git - rust.git/blob - tests/ui/option_if_let_else.rs
Rollup merge of #76474 - bjorn3:driver_selected_codegen, r=oli-obk
[rust.git] / tests / ui / option_if_let_else.rs
1 // run-rustfix
2 #![warn(clippy::option_if_let_else)]
3 #![allow(clippy::redundant_closure)]
4
5 fn bad1(string: Option<&str>) -> (bool, &str) {
6     if let Some(x) = string {
7         (true, x)
8     } else {
9         (false, "hello")
10     }
11 }
12
13 fn else_if_option(string: Option<&str>) -> Option<(bool, &str)> {
14     if string.is_none() {
15         None
16     } else if let Some(x) = string {
17         Some((true, x))
18     } else {
19         Some((false, ""))
20     }
21 }
22
23 fn unop_bad(string: &Option<&str>, mut num: Option<i32>) {
24     let _ = if let Some(s) = *string { s.len() } else { 0 };
25     let _ = if let Some(s) = &num { s } else { &0 };
26     let _ = if let Some(s) = &mut num {
27         *s += 1;
28         s
29     } else {
30         &mut 0
31     };
32     let _ = if let Some(ref s) = num { s } else { &0 };
33     let _ = if let Some(mut s) = num {
34         s += 1;
35         s
36     } else {
37         0
38     };
39     let _ = if let Some(ref mut s) = num {
40         *s += 1;
41         s
42     } else {
43         &mut 0
44     };
45 }
46
47 fn longer_body(arg: Option<u32>) -> u32 {
48     if let Some(x) = arg {
49         let y = x * x;
50         y * y
51     } else {
52         13
53     }
54 }
55
56 fn impure_else(arg: Option<i32>) {
57     let side_effect = || {
58         println!("return 1");
59         1
60     };
61     let _ = if let Some(x) = arg {
62         x
63     } else {
64         // map_or_else must be suggested
65         side_effect()
66     };
67 }
68
69 fn test_map_or_else(arg: Option<u32>) {
70     let _ = if let Some(x) = arg {
71         x * x * x * x
72     } else {
73         let mut y = 1;
74         y = (y + 2 / y) / 2;
75         y = (y + 2 / y) / 2;
76         y
77     };
78 }
79
80 fn negative_tests(arg: Option<u32>) -> u32 {
81     let _ = if let Some(13) = arg { "unlucky" } else { "lucky" };
82     for _ in 0..10 {
83         let _ = if let Some(x) = arg {
84             x
85         } else {
86             continue;
87         };
88     }
89     let _ = if let Some(x) = arg {
90         return x;
91     } else {
92         5
93     };
94     7
95 }
96
97 fn main() {
98     let optional = Some(5);
99     let _ = if let Some(x) = optional { x + 2 } else { 5 };
100     let _ = bad1(None);
101     let _ = else_if_option(None);
102     unop_bad(&None, None);
103     let _ = longer_body(None);
104     test_map_or_else(None);
105     let _ = negative_tests(None);
106     let _ = impure_else(None);
107 }