]> git.proxmox.com Git - rustc.git/blob - src/tools/clippy/tests/ui/manual_find_map.fixed
New upstream version 1.63.0+dfsg1
[rustc.git] / src / tools / clippy / tests / ui / manual_find_map.fixed
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_map(|a| to_opt(a));
9
10 // ref pattern, expect()
11 let _ = (0..).find_map(|a| to_opt(a));
12
13 // is_ok(), unwrap_or()
14 let _ = (0..).find_map(|a| to_res(a).ok());
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_map(|f| f.option_field.clone());
55
56 let _ = vec
57 .iter()
58 .find_map(|f| f.ref_field.cloned());
59
60 let _ = vec
61 .iter()
62 .find_map(|f| f.ref_field.copied());
63
64 let _ = vec
65 .iter()
66 .find_map(|f| f.result_field.clone().ok());
67
68 let _ = vec
69 .iter()
70 .find_map(|f| f.result_field.as_ref().ok());
71
72 let _ = vec
73 .iter()
74 .find_map(|f| f.result_field.as_deref().ok());
75
76 let _ = vec
77 .iter_mut()
78 .find_map(|f| f.result_field.as_mut().ok());
79
80 let _ = vec
81 .iter_mut()
82 .find_map(|f| f.result_field.as_deref_mut().ok());
83
84 let _ = vec
85 .iter()
86 .find_map(|f| f.result_field.to_owned().ok());
87 }