1 // Test traits 2 3 trait Foo { bar(x: i32) -> Baz<U>4 fn bar(x: i32) -> Baz<U> { 5 Baz::new() 6 } 7 baz(a: AAAAAAAAAAAAAAAAAAAAAA, b: BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB) -> RetType8 fn baz(a: AAAAAAAAAAAAAAAAAAAAAA, b: BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB) -> RetType; 9 foo( a: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA, b: BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB, ) -> RetType10 fn foo( 11 a: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA, // Another comment 12 b: BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB, 13 ) -> RetType; // Some comment 14 baz(&mut self) -> i3215 fn baz(&mut self) -> i32; 16 increment(&mut self, x: i32)17 fn increment(&mut self, x: i32); 18 read(&mut self, x: BufReader<R> ) where R: Read19 fn read(&mut self, x: BufReader<R> /* Used to be MemReader */) 20 where 21 R: Read; 22 } 23 24 pub trait WriteMessage { write_message(&mut self, &FrontendMessage) -> io::Result<()>25 fn write_message(&mut self, &FrontendMessage) -> io::Result<()>; 26 } 27 28 trait Runnable { handler(self: &Runnable)29 fn handler(self: &Runnable); 30 } 31 32 trait TraitWithExpr { fn_with_expr(x: [i32; 1])33 fn fn_with_expr(x: [i32; 1]); 34 } 35 36 trait Test { 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 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 { test()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 { foo()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; f()218 pub fn f(); g()219 pub fn g() {} 220 } 221