]> git.lizzy.rs Git - rust.git/blob - src/tools/clippy/tests/ui/manual_find_map.rs
Auto merge of #97931 - xldenis:fix-if-let-source-scopes, r=nagisa
[rust.git] / src / tools / clippy / tests / ui / manual_find_map.rs
1 // run-rustfix
2 #![allow(dead_code)]
3 #![warn(clippy::manual_find_map)]
4 #![allow(clippy::redundant_closure)] // FIXME suggestion may have redundant closure
5
6 fn main() {
7     // is_some(), unwrap()
8     let _ = (0..).find(|n| to_opt(*n).is_some()).map(|a| to_opt(a).unwrap());
9
10     // ref pattern, expect()
11     let _ = (0..).find(|&n| to_opt(n).is_some()).map(|a| to_opt(a).expect("hi"));
12
13     // is_ok(), unwrap_or()
14     let _ = (0..).find(|&n| to_res(n).is_ok()).map(|a| to_res(a).unwrap_or(1));
15 }
16
17 fn no_lint() {
18     // no shared code
19     let _ = (0..).filter(|n| *n > 1).map(|n| n + 1);
20
21     // very close but different since filter() provides a reference
22     let _ = (0..).find(|n| to_opt(n).is_some()).map(|a| to_opt(a).unwrap());
23
24     // similar but different
25     let _ = (0..).find(|n| to_opt(n).is_some()).map(|n| to_res(n).unwrap());
26     let _ = (0..)
27         .find(|n| to_opt(n).map(|n| n + 1).is_some())
28         .map(|a| to_opt(a).unwrap());
29 }
30
31 fn to_opt<T>(_: T) -> Option<T> {
32     unimplemented!()
33 }
34
35 fn to_res<T>(_: T) -> Result<T, ()> {
36     unimplemented!()
37 }
38
39 struct Issue8920<'a> {
40     option_field: Option<String>,
41     result_field: Result<String, ()>,
42     ref_field: Option<&'a usize>,
43 }
44
45 fn issue_8920() {
46     let mut vec = vec![Issue8920 {
47         option_field: Some(String::from("str")),
48         result_field: Ok(String::from("str")),
49         ref_field: Some(&1),
50     }];
51
52     let _ = vec
53         .iter()
54         .find(|f| f.option_field.is_some())
55         .map(|f| f.option_field.clone().unwrap());
56
57     let _ = vec
58         .iter()
59         .find(|f| f.ref_field.is_some())
60         .map(|f| f.ref_field.cloned().unwrap());
61
62     let _ = vec
63         .iter()
64         .find(|f| f.ref_field.is_some())
65         .map(|f| f.ref_field.copied().unwrap());
66
67     let _ = vec
68         .iter()
69         .find(|f| f.result_field.is_ok())
70         .map(|f| f.result_field.clone().unwrap());
71
72     let _ = vec
73         .iter()
74         .find(|f| f.result_field.is_ok())
75         .map(|f| f.result_field.as_ref().unwrap());
76
77     let _ = vec
78         .iter()
79         .find(|f| f.result_field.is_ok())
80         .map(|f| f.result_field.as_deref().unwrap());
81
82     let _ = vec
83         .iter_mut()
84         .find(|f| f.result_field.is_ok())
85         .map(|f| f.result_field.as_mut().unwrap());
86
87     let _ = vec
88         .iter_mut()
89         .find(|f| f.result_field.is_ok())
90         .map(|f| f.result_field.as_deref_mut().unwrap());
91
92     let _ = vec
93         .iter()
94         .find(|f| f.result_field.is_ok())
95         .map(|f| f.result_field.to_owned().unwrap());
96 }