| #![warn(clippy::option_zip_none)] |
| #![allow(clippy::needless_borrow)] |
| mod edge_case { |
| trait MyZip { |
| fn zip(self, other: Option<()>) -> &'static str; |
| } |
| |
| impl<T> MyZip for &Option<T> { |
| fn zip(self, _other: Option<()>) -> &'static str { |
| "not Option::zip" |
| } |
| } |
| |
| pub fn test_custom_trait() { |
| let opt = Some(1); |
| let _ = (&opt).zip(None::<()>); |
| } |
| |
| enum MyOption { |
| Some(i32), |
| None, |
| } |
| |
| impl MyOption { |
| fn zip(self, _other: Option<()>) -> &'static str { |
| "not Option::zip" |
| } |
| } |
| |
| pub fn test_custom_enum() { |
| let opt = MyOption::Some(1); |
| let _ = opt.zip(None::<()>); |
| } |
| } |
| |
| fn main() { |
| let opt = Some(5); |
| |
| let _ = opt.map(|n| (n, None::<()>)); |
| //~^ option_zip_none |
| |
| let _ = opt.zip(Some(42)); |
| |
| let iter = vec![1, 2, 3].into_iter(); |
| let _ = iter.zip(std::iter::empty::<i32>()); |
| |
| let standard_opt = Some(1); |
| let _ = (&standard_opt).map(|n| (n, None::<()>)); |
| //~^ option_zip_none |
| |
| let _ = Some(1).map(|n| (None::<i32>, n)); |
| //~^ option_zip_none |
| |
| let _ = Some(1).map(|n| (n, None::<()>)); |
| //~^ option_zip_none |
| |
| macro_rules! macro_none { |
| () => { |
| None::<()> |
| }; |
| } |
| let opt = Some(1); |
| let _ = opt.map(|n| (n, macro_none!())); |
| //~^ option_zip_none |
| |
| macro_rules! macro_zip { |
| ($opt:expr) => { |
| $opt.zip(None::<()>) |
| }; |
| } |
| let _ = macro_zip!(Some(1)); |
| macro_rules! macro_zip_arg { |
| ($opt:expr, $arg:expr) => { |
| $opt.zip($arg) |
| }; |
| } |
| let _ = macro_zip_arg!(Some(1), None::<()>); |
| } |