#![warn(clippy::let_underscore_must_use)] #![allow(clippy::unnecessary_wraps)] // Debug implementations can fire this lint, // so we shouldn't lint external macros #[derive(Debug)] struct Foo { field: i32, } #[must_use] fn f() -> u32 { 0 } fn g() -> Result { Ok(0) } #[must_use] fn l(x: T) -> T { x } fn h() -> u32 { 0 } struct S; impl S { #[must_use] pub fn f(&self) -> u32 { 0 } pub fn g(&self) -> Result { Ok(0) } fn k(&self) -> u32 { 0 } #[must_use] fn h() -> u32 { 0 } fn p() -> Result { Ok(0) } } trait Trait { #[must_use] fn a() -> u32; } impl Trait for S { fn a() -> u32 { 0 } } fn main() { let _ = f(); //~^ let_underscore_must_use let _ = g(); //~^ let_underscore_must_use let _ = h(); let _ = l(0_u32); //~^ let_underscore_must_use let s = S {}; let _ = s.f(); //~^ let_underscore_must_use let _ = s.g(); //~^ let_underscore_must_use let _ = s.k(); let _ = S::h(); //~^ let_underscore_must_use let _ = S::p(); //~^ let_underscore_must_use let _ = S::a(); //~^ let_underscore_must_use let _ = if true { Ok(()) } else { Err(()) }; //~^ let_underscore_must_use let a = Result::<(), ()>::Ok(()); let _ = a.is_ok(); //~^ let_underscore_must_use let _ = a.map(|_| ()); //~^ let_underscore_must_use let _ = a; //~^ let_underscore_must_use #[allow(clippy::let_underscore_must_use)] let _ = a; }