| #![allow(unused)] | |
| #![warn(clippy::match_as_ref)] | |
| fn match_as_ref() { | |
| let owned: Option<()> = None; | |
| let borrowed: Option<&()> = owned.as_ref(); | |
| let mut mut_owned: Option<()> = None; | |
| let borrow_mut: Option<&mut ()> = mut_owned.as_mut(); | |
| } | |
| mod issue4437 { | |
| use std::error::Error; | |
| use std::fmt; | |
| use std::num::ParseIntError; | |
| #[derive(Debug)] | |
| struct E { | |
| source: Option<ParseIntError>, | |
| } | |
| impl Error for E { | |
| fn source(&self) -> Option<&(dyn Error + 'static)> { | |
| self.source.as_ref().map(|x| x as _) | |
| } | |
| } | |
| impl fmt::Display for E { | |
| fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { | |
| unimplemented!() | |
| } | |
| } | |
| } | |
| fn main() { | |
| // Don't lint | |
| let _ = match Some(0) { | |
| #[cfg(feature = "foo")] | |
| Some(ref x) if *x > 50 => None, | |
| Some(ref x) => Some(x), | |
| None => None, | |
| }; | |
| } | |
| mod issue15691 { | |
| use std::ops::{Deref, DerefMut}; | |
| struct A(B); | |
| struct B; | |
| impl Deref for A { | |
| type Target = B; | |
| fn deref(&self) -> &Self::Target { | |
| &self.0 | |
| } | |
| } | |
| impl DerefMut for A { | |
| fn deref_mut(&mut self) -> &mut Self::Target { | |
| &mut self.0 | |
| } | |
| } | |
| fn func() { | |
| let mut a = Some(A(B)); | |
| let mut b = Some(B); | |
| // Do not lint, we don't have `None => None` | |
| let _ = match b { | |
| Some(ref mut x) => Some(x), | |
| None => a.as_deref_mut(), | |
| }; | |
| } | |
| } | |
| fn recv_requiring_parens() { | |
| struct S; | |
| impl std::ops::Not for S { | |
| type Output = Option<u64>; | |
| fn not(self) -> Self::Output { | |
| None | |
| } | |
| } | |
| let _ = (!S).as_ref(); | |
| } | |
| fn issue15932() { | |
| let _: Option<&u32> = Some(0).as_ref(); | |
| let _: Option<&dyn std::fmt::Debug> = Some(0).as_ref().map(|x| x as _); | |
| } | |
| fn wrongly_unmangled_macros() { | |
| macro_rules! test_expr { | |
| ($val:expr) => { | |
| Some($val) | |
| }; | |
| } | |
| let _: Option<&u32> = test_expr!(42).as_ref(); | |
| } |