]> git.lizzy.rs Git - rust.git/blob - src/tools/rustfmt/tests/target/trait.rs
:arrow_up: rust-analyzer
[rust.git] / src / tools / rustfmt / tests / target / trait.rs
1 // Test traits
2
3 trait Foo {
4     fn bar(x: i32) -> Baz<U> {
5         Baz::new()
6     }
7
8     fn baz(a: AAAAAAAAAAAAAAAAAAAAAA, b: BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB) -> RetType;
9
10     fn foo(
11         a: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA, // Another comment
12         b: BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB,
13     ) -> RetType; // Some comment
14
15     fn baz(&mut self) -> i32;
16
17     fn increment(&mut self, x: i32);
18
19     fn read(&mut self, x: BufReader<R> /* Used to be MemReader */)
20     where
21         R: Read;
22 }
23
24 pub trait WriteMessage {
25     fn write_message(&mut self, &FrontendMessage) -> io::Result<()>;
26 }
27
28 trait Runnable {
29     fn handler(self: &Runnable);
30 }
31
32 trait TraitWithExpr {
33     fn fn_with_expr(x: [i32; 1]);
34 }
35
36 trait Test {
37     fn read_struct<T, F>(&mut self, s_name: &str, len: usize, f: F) -> Result<T, Self::Error>
38     where
39         F: FnOnce(&mut Self) -> Result<T, Self::Error>;
40 }
41
42 trait T {}
43
44 trait Foo {
45     type Bar: Baz;
46     type Inner: Foo = Box<Foo>;
47 }
48
49 trait ConstCheck<T>: Foo
50 where
51     T: Baz,
52 {
53     const J: i32;
54 }
55
56 trait Tttttttttttttttttttttttttttttttttttttttttttttttttttttttttt<T>
57 where
58     T: Foo,
59 {
60 }
61
62 trait Ttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt<T>
63 where
64     T: Foo,
65 {
66 }
67
68 trait FooBar<T>: Tttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt
69 where
70     J: Bar,
71 {
72     fn test();
73 }
74
75 trait WhereList<T, J>
76 where
77     T: Foo,
78     J: Bar,
79 {
80 }
81
82 trait X /* comment */ {}
83 trait Y // comment
84 {
85 }
86
87 // #2055
88 pub trait Foo:
89 // A and C
90 A + C
91 // and B
92     + B
93 {}
94
95 // #2158
96 trait Foo {
97     type ItRev = <MergingUntypedTimeSeries<SliceSeries<SliceWindow>> as UntypedTimeSeries>::IterRev;
98     type IteRev =
99         <MergingUntypedTimeSeries<SliceSeries<SliceWindow>> as UntypedTimeSeries>::IterRev;
100 }
101
102 // #2331
103 trait MyTrait<
104     AAAAAAAAAAAAAAAAAAAA,
105     BBBBBBBBBBBBBBBBBBBB,
106     CCCCCCCCCCCCCCCCCCCC,
107     DDDDDDDDDDDDDDDDDDDD,
108 >
109 {
110     fn foo() {}
111 }
112
113 // Trait aliases
114 trait FooBar = Foo + Bar;
115 trait FooBar<A, B, C> = Foo + Bar;
116 pub trait FooBar = Foo + Bar;
117 pub trait FooBar<A, B, C> = Foo + Bar;
118 trait AAAAAAAAAAAAAAAAAA = BBBBBBBBBBBBBBBBBBB + CCCCCCCCCCCCCCCCCCCCCCCCCCCCC + DDDDDDDDDDDDDDDDDD;
119 pub trait AAAAAAAAAAAAAAAAAA =
120     BBBBBBBBBBBBBBBBBBB + CCCCCCCCCCCCCCCCCCCCCCCCCCCCC + DDDDDDDDDDDDDDDDDD;
121 trait AAAAAAAAAAAAAAAAAAA =
122     BBBBBBBBBBBBBBBBBBB + CCCCCCCCCCCCCCCCCCCCCCCCCCCCC + DDDDDDDDDDDDDDDDDD;
123 trait AAAAAAAAAAAAAAAAAA =
124     BBBBBBBBBBBBBBBBBBB + CCCCCCCCCCCCCCCCCCCCCCCCCCCCC + DDDDDDDDDDDDDDDDDDD;
125 trait AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA<A, B, C, D, E> =
126     FooBar;
127 trait AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA<
128     A,
129     B,
130     C,
131     D,
132     E,
133 > = FooBar;
134 #[rustfmt::skip]
135 trait FooBar = Foo
136     + Bar;
137
138 // #2637
139 auto trait Example {}
140 pub auto trait PubExample {}
141 pub unsafe auto trait PubUnsafeExample {}
142
143 // #3006
144 trait Foo<'a> {
145     type Bar<'a>;
146 }
147
148 impl<'a> Foo<'a> for i32 {
149     type Bar<'a> = i32;
150 }
151
152 // #3092
153 pub mod test {
154     pub trait ATraitWithALooongName {}
155     pub trait ATrait:
156         ATraitWithALooongName
157         + ATraitWithALooongName
158         + ATraitWithALooongName
159         + ATraitWithALooongName
160     {
161     }
162 }
163
164 // Trait aliases with where clauses.
165 trait A = where for<'b> &'b Self: Send;
166
167 trait B = where for<'b> &'b Self: Send + Clone + Copy + SomeTrait + AAAAAAAA + BBBBBBB + CCCCCCCCCC;
168 trait B =
169     where for<'b> &'b Self: Send + Clone + Copy + SomeTrait + AAAAAAAA + BBBBBBB + CCCCCCCCCCC;
170 trait B = where
171     for<'b> &'b Self:
172         Send + Clone + Copy + SomeTrait + AAAAAAAA + BBBBBBB + CCCCCCCCCCCCCCCCCCCCCCC;
173 trait B = where
174     for<'b> &'b Self: Send
175         + Clone
176         + Copy
177         + SomeTrait
178         + AAAAAAAA
179         + BBBBBBB
180         + CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC;
181
182 trait B = where
183     for<'b> &'b Self: Send
184         + Clone
185         + Copy
186         + SomeTrait
187         + AAAAAAAA
188         + BBBBBBB
189         + CCCCCCCCC
190         + DDDDDDD
191         + DDDDDDDD
192         + DDDDDDDDD
193         + EEEEEEE;
194
195 trait A<'a, 'b, 'c> = Debug<T> + Foo where for<'b> &'b Self: Send;
196
197 trait B<'a, 'b, 'c> = Debug<T> + Foo
198 where
199     for<'b> &'b Self: Send + Clone + Copy + SomeTrait + AAAAAAAA + BBBBBBB + CCCCCCCCC + DDDDDDD;
200
201 trait B<'a, 'b, 'c, T> = Debug<'a, T>
202 where
203     for<'b> &'b Self: Send
204         + Clone
205         + Copy
206         + SomeTrait
207         + AAAAAAAA
208         + BBBBBBB
209         + CCCCCCCCC
210         + DDDDDDD
211         + DDDDDDDD
212         + DDDDDDDDD
213         + EEEEEEE;
214
215 trait Visible {
216     pub const C: i32;
217     pub type T;
218     pub fn f();
219     pub fn g() {}
220 }