| #![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:?}"); |
| } |