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