blob: 0e002c90113aaa04679bd675753940d4c11b2e9f [file] [edit]
#![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::<()>);
}