]> git.lizzy.rs Git - rust.git/blob - tests/ui/use_self_trait.fixed
9bcd692fb3511d805c24f6b49902eb31300936de
[rust.git] / tests / ui / use_self_trait.fixed
1 // run-rustfix
2
3 #![warn(clippy::use_self)]
4 #![allow(dead_code)]
5 #![allow(clippy::should_implement_trait, clippy::boxed_local)]
6
7 use std::ops::Mul;
8
9 trait SelfTrait {
10     fn refs(p1: &Self) -> &Self;
11     fn ref_refs<'a>(p1: &'a &'a Self) -> &'a &'a Self;
12     fn mut_refs(p1: &mut Self) -> &mut Self;
13     fn nested(p1: Box<Self>, p2: (&u8, &Self));
14     fn vals(r: Self) -> Self;
15 }
16
17 #[derive(Default)]
18 struct Bad;
19
20 impl SelfTrait for Bad {
21     fn refs(p1: &Self) -> &Self {
22         p1
23     }
24
25     fn ref_refs<'a>(p1: &'a &'a Self) -> &'a &'a Self {
26         p1
27     }
28
29     fn mut_refs(p1: &mut Self) -> &mut Self {
30         p1
31     }
32
33     fn nested(_p1: Box<Self>, _p2: (&u8, &Self)) {}
34
35     fn vals(_: Self) -> Self {
36         Self::default()
37     }
38 }
39
40 impl Mul for Bad {
41     type Output = Self;
42
43     fn mul(self, rhs: Self) -> Self {
44         rhs
45     }
46 }
47
48 impl Clone for Bad {
49     fn clone(&self) -> Self {
50         // FIXME: applicable here
51         Bad
52     }
53 }
54
55 #[derive(Default)]
56 struct Good;
57
58 impl SelfTrait for Good {
59     fn refs(p1: &Self) -> &Self {
60         p1
61     }
62
63     fn ref_refs<'a>(p1: &'a &'a Self) -> &'a &'a Self {
64         p1
65     }
66
67     fn mut_refs(p1: &mut Self) -> &mut Self {
68         p1
69     }
70
71     fn nested(_p1: Box<Self>, _p2: (&u8, &Self)) {}
72
73     fn vals(_: Self) -> Self {
74         Self::default()
75     }
76 }
77
78 impl Mul for Good {
79     type Output = Self;
80
81     fn mul(self, rhs: Self) -> Self {
82         rhs
83     }
84 }
85
86 trait NameTrait {
87     fn refs(p1: &u8) -> &u8;
88     fn ref_refs<'a>(p1: &'a &'a u8) -> &'a &'a u8;
89     fn mut_refs(p1: &mut u8) -> &mut u8;
90     fn nested(p1: Box<u8>, p2: (&u8, &u8));
91     fn vals(p1: u8) -> u8;
92 }
93
94 // Using `Self` instead of the type name is OK
95 impl NameTrait for u8 {
96     fn refs(p1: &Self) -> &Self {
97         p1
98     }
99
100     fn ref_refs<'a>(p1: &'a &'a Self) -> &'a &'a Self {
101         p1
102     }
103
104     fn mut_refs(p1: &mut Self) -> &mut Self {
105         p1
106     }
107
108     fn nested(_p1: Box<Self>, _p2: (&Self, &Self)) {}
109
110     fn vals(_: Self) -> Self {
111         Self::default()
112     }
113 }
114
115 fn main() {}