3 #![warn(clippy::manual_filter_map)]
4 #![allow(clippy::redundant_closure)] // FIXME suggestion may have redundant closure
8 let _ = (0..).filter(|n| to_opt(*n).is_some()).map(|a| to_opt(a).unwrap());
10 // ref pattern, expect()
11 let _ = (0..).filter(|&n| to_opt(n).is_some()).map(|a| to_opt(a).expect("hi"));
13 // is_ok(), unwrap_or()
14 let _ = (0..).filter(|&n| to_res(n).is_ok()).map(|a| to_res(a).unwrap_or(1));
19 let _ = (0..).filter(|n| *n > 1).map(|n| n + 1);
21 // very close but different since filter() provides a reference
22 let _ = (0..).filter(|n| to_opt(n).is_some()).map(|a| to_opt(a).unwrap());
24 // similar but different
25 let _ = (0..).filter(|n| to_opt(n).is_some()).map(|n| to_res(n).unwrap());
27 .filter(|n| to_opt(n).map(|n| n + 1).is_some())
28 .map(|a| to_opt(a).unwrap());
31 fn to_opt<T>(_: T) -> Option<T> {
35 fn to_res<T>(_: T) -> Result<T, ()> {
39 struct Issue8920<'a> {
40 option_field: Option<String>,
41 result_field: Result<String, ()>,
42 ref_field: Option<&'a usize>,
46 let mut vec = vec![Issue8920 {
47 option_field: Some(String::from("str")),
48 result_field: Ok(String::from("str")),
54 .filter(|f| f.option_field.is_some())
55 .map(|f| f.option_field.clone().unwrap());
59 .filter(|f| f.ref_field.is_some())
60 .map(|f| f.ref_field.cloned().unwrap());
64 .filter(|f| f.ref_field.is_some())
65 .map(|f| f.ref_field.copied().unwrap());
69 .filter(|f| f.result_field.is_ok())
70 .map(|f| f.result_field.clone().unwrap());
74 .filter(|f| f.result_field.is_ok())
75 .map(|f| f.result_field.as_ref().unwrap());
79 .filter(|f| f.result_field.is_ok())
80 .map(|f| f.result_field.as_deref().unwrap());
84 .filter(|f| f.result_field.is_ok())
85 .map(|f| f.result_field.as_mut().unwrap());
89 .filter(|f| f.result_field.is_ok())
90 .map(|f| f.result_field.as_deref_mut().unwrap());
94 .filter(|f| f.result_field.is_ok())
95 .map(|f| f.result_field.to_owned().unwrap());