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