// run-rustfix #![warn(clippy::manual_map)] #![allow(clippy::toplevel_ref_arg)] fn main() { // Lint. `y` is declared within the arm, so it isn't captured by the map closure let _ = Some(0).map(|x| { let y = (String::new(), String::new()); (x, y.0) }); // Don't lint. `s` is borrowed until partway through the arm, but needs to be captured by the map // closure let s = Some(String::new()); let _ = match &s { Some(x) => Some((x.clone(), s)), None => None, }; // Don't lint. `s` is borrowed until partway through the arm, but needs to be captured by the map // closure let s = Some(String::new()); let _ = match &s { Some(x) => Some({ let clone = x.clone(); let s = || s; (clone, s()) }), None => None, }; // Don't lint. `s` is borrowed until partway through the arm, but needs to be captured as a mutable // reference by the map closure let mut s = Some(String::new()); let _ = match &s { Some(x) => Some({ let clone = x.clone(); let ref mut s = s; (clone, s) }), None => None, }; // Lint. `s` is captured by reference, so no lifetime issues. let s = Some(String::new()); let _ = s.as_ref().map(|x| { if let Some(ref s) = s { (x.clone(), s) } else { panic!() } }); unsafe fn f(x: u32) -> u32 { x } unsafe { let _ = Some(0).map(|x| f(x)); } let _ = Some(0).map(|x| unsafe { f(x) }); }