]> git.proxmox.com Git - rustc.git/blame - src/tools/clippy/tests/ui/explicit_deref_methods.fixed
New upstream version 1.57.0+dfsg1
[rustc.git] / src / tools / clippy / tests / ui / explicit_deref_methods.fixed
CommitLineData
f20569fa
XL
1// run-rustfix
2
c295e0f8 3#![allow(unused_variables, clippy::clone_double_ref)]
f20569fa
XL
4#![warn(clippy::explicit_deref_methods)]
5
6use std::ops::{Deref, DerefMut};
7
8fn concat(deref_str: &str) -> String {
9 format!("{}bar", deref_str)
10}
11
12fn just_return(deref_str: &str) -> &str {
13 deref_str
14}
15
16struct CustomVec(Vec<u8>);
17impl Deref for CustomVec {
18 type Target = Vec<u8>;
19
20 fn deref(&self) -> &Vec<u8> {
21 &self.0
22 }
23}
24
25fn main() {
26 let a: &mut String = &mut String::from("foo");
27
28 // these should require linting
29
30 let b: &str = &*a;
31
cdc7bbd5 32 let b: &mut str = &mut **a;
f20569fa
XL
33
34 // both derefs should get linted here
35 let b: String = format!("{}, {}", &*a, &*a);
36
37 println!("{}", &*a);
38
39 #[allow(clippy::match_single_binding)]
40 match &*a {
41 _ => (),
42 }
43
44 let b: String = concat(&*a);
45
cdc7bbd5 46 let b = just_return(a);
f20569fa 47
cdc7bbd5 48 let b: String = concat(just_return(a));
f20569fa 49
cdc7bbd5 50 let b: &str = &**a;
f20569fa
XL
51
52 let opt_a = Some(a.clone());
53 let b = &*opt_a.unwrap();
54
55 // following should not require linting
56
57 let cv = CustomVec(vec![0, 42]);
58 let c = cv.deref()[0];
59
60 let b: &str = &*a.deref();
61
62 let b: String = a.deref().clone();
63
64 let b: usize = a.deref_mut().len();
65
66 let b: &usize = &a.deref().len();
67
68 let b: &str = &*a;
69
70 let b: &mut str = &mut *a;
71
72 macro_rules! expr_deref {
73 ($body:expr) => {
74 $body.deref()
75 };
76 }
77 let b: &str = expr_deref!(a);
78
cdc7bbd5
XL
79 let b: &str = expr_deref!(&*a);
80
f20569fa
XL
81 // The struct does not implement Deref trait
82 #[derive(Copy, Clone)]
83 struct NoLint(u32);
84 impl NoLint {
85 pub fn deref(self) -> u32 {
86 self.0
87 }
88 pub fn deref_mut(self) -> u32 {
89 self.0
90 }
91 }
92 let no_lint = NoLint(42);
93 let b = no_lint.deref();
94 let b = no_lint.deref_mut();
95}