#![allow(unused)] #![warn(clippy::ref_option_ref)] //@no-rustfix // This lint is not tagged as run-rustfix because automatically // changing the type of a variable would also means changing // all usages of this variable to match and This is not handled // by this lint. static THRESHOLD: i32 = 10; static REF_THRESHOLD: &Option<&i32> = &Some(&THRESHOLD); //~^ ref_option_ref const CONST_THRESHOLD: &i32 = &10; const REF_CONST: &Option<&i32> = &Some(CONST_THRESHOLD); //~^ ref_option_ref type RefOptRefU32<'a> = &'a Option<&'a u32>; //~^ ref_option_ref type RefOptRef<'a, T> = &'a Option<&'a T>; //~^ ref_option_ref fn foo(data: &Option<&u32>) {} //~^ ref_option_ref fn bar(data: &u32) -> &Option<&u32> { //~^ ref_option_ref &None } struct StructRef<'a> { data: &'a Option<&'a u32>, //~^ ref_option_ref } struct StructTupleRef<'a>(u32, &'a Option<&'a u32>); //~^ ref_option_ref enum EnumRef<'a> { Variant1(u32), Variant2(&'a Option<&'a u32>), //~^ ref_option_ref } trait RefOptTrait { type A; fn foo(&self, _: Self::A); } impl RefOptTrait for u32 { type A = &'static Option<&'static Self>; //~^ ref_option_ref fn foo(&self, _: Self::A) {} } fn main() { let x: &Option<&u32> = &None; //~^ ref_option_ref } fn issue9682(arg: &Option<&mut String>) { // Should not lint, as the inner ref is mutable making it non `Copy` println!("{arg:?}"); }