#![allow(clippy::redundant_clone, clippy::unnecessary_operation, clippy::incompatible_msrv)] #![warn(clippy::manual_non_exhaustive, clippy::borrow_as_ptr, clippy::manual_bits)] use std::mem::{size_of, size_of_val}; use std::ops::Deref; mod enums { enum E { A, B, #[doc(hidden)] _C, } // user forgot to remove the marker #[non_exhaustive] enum Ep { A, B, #[doc(hidden)] _C, } } fn option_as_ref_deref() { let mut opt = Some(String::from("123")); let _ = opt.as_ref().map(String::as_str); let _ = opt.as_ref().map(|x| x.as_str()); let _ = opt.as_mut().map(String::as_mut_str); let _ = opt.as_mut().map(|x| x.as_mut_str()); } fn match_like_matches() { let _y = match Some(5) { Some(0) => true, _ => false, }; } fn match_same_arms() { match (1, 2, 3) { (1, .., 3) => 42, (.., 3) => 42, _ => 0, }; } fn match_same_arms2() { let _ = match Some(42) { Some(_) => 24, None => 24, }; } fn manual_strip_msrv() { let s = "hello, world!"; if s.starts_with("hello, ") { assert_eq!(s["hello, ".len()..].to_uppercase(), "WORLD!"); } } fn check_index_refutable_slice() { // This shouldn't trigger `clippy::index_refutable_slice` as the suggestion // would only be valid from 1.42.0 onward let slice: Option<&[u32]> = Some(&[1]); if let Some(slice) = slice { println!("{}", slice[0]); } } fn map_clone_suggest_copied() { // This should still trigger the lint but suggest `cloned()` instead of `copied()` let _: Option = Some(&16).cloned(); } fn borrow_as_ptr() { let val = 1; let _p = &val as *const i32; let mut val_mut = 1; let _p_mut = &mut val_mut as *mut i32; } fn manual_bits() { size_of::() * 8; size_of_val(&0u32) * 8; } fn main() { option_as_ref_deref(); match_like_matches(); match_same_arms(); match_same_arms2(); manual_strip_msrv(); check_index_refutable_slice(); borrow_as_ptr(); }