#![warn(clippy::all)] #![warn(clippy::redundant_pattern_matching)] #![allow( unused_must_use, clippy::needless_bool, clippy::needless_if, clippy::match_like_matches_macro, clippy::equatable_if_let, clippy::if_same_then_else )] #![feature(let_chains, if_let_guard)] fn issue_11174(boolean: bool, maybe_some: Option) -> bool { maybe_some.is_none() && (!boolean) } fn issue_11174_edge_cases(boolean: bool, boolean2: bool, maybe_some: Option) { let _ = maybe_some.is_none() && (boolean || boolean2); // guard needs parentheses let _ = match maybe_some { // can't use `matches!` here // because `expr` metavars in macros don't allow let exprs None if let Some(x) = Some(0) && x > 5 => true, _ => false }; } fn main() { if None::<()>.is_none() {} if Some(42).is_some() {} if Some(42).is_some() { foo(); } else { bar(); } while Some(42).is_some() {} while Some(42).is_none() {} while None::<()>.is_none() {} let mut v = vec![1, 2, 3]; while v.pop().is_some() { foo(); } if None::.is_none() {} if Some(42).is_some() {} Some(42).is_some(); None::<()>.is_none(); let _ = None::<()>.is_none(); let opt = Some(false); let _ = if opt.is_some() { true } else { false }; issue6067(); issue10726(); issue10803(); let _ = if gen_opt().is_some() { 1 } else if gen_opt().is_none() { 2 } else { 3 }; if gen_opt().is_some() {} } fn gen_opt() -> Option<()> { None } fn foo() {} fn bar() {} // Methods that are unstable const should not be suggested within a const context, see issue #5697. // However, in Rust 1.48.0 the methods `is_some` and `is_none` of `Option` were stabilized as const, // so the following should be linted. const fn issue6067() { if Some(42).is_some() {} if None::<()>.is_none() {} while Some(42).is_some() {} while None::<()>.is_none() {} Some(42).is_some(); None::<()>.is_none(); } #[allow(clippy::deref_addrof, dead_code, clippy::needless_borrow)] fn issue7921() { if (&None::<()>).is_none() {} if (&None::<()>).is_none() {} } fn issue10726() { let x = Some(42); x.is_some(); x.is_none(); x.is_none(); x.is_some(); // Don't lint match x { Some(21) => true, _ => false, }; } fn issue10803() { let x = Some(42); let _ = x.is_some(); let _ = x.is_none(); // Don't lint let _ = matches!(x, Some(16)); }