]> git.lizzy.rs Git - rust.git/blob - tests/target/match.rs
Merge pull request #484 from marcusklaas/patternz
[rust.git] / tests / target / match.rs
1 // Match expressions.
2
3 fn foo() {
4     // A match expression.
5     match x {
6         // Some comment.
7         a => foo(),
8         b if 0 < 42 => foo(),
9         c => { // Another comment.
10             // Comment.
11             an_expression;
12             foo()
13         }
14         // Perhaps this should introduce braces?
15         Foo(ref bar) =>
16             aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,
17         Pattern1 | Pattern2 | Pattern3 => false,
18         Paternnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn |
19         Paternnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn => {
20             blah
21         }
22         Patternnnnnnnnnnnnnnnnnnn |
23         Patternnnnnnnnnnnnnnnnnnn |
24         Patternnnnnnnnnnnnnnnnnnn |
25         Patternnnnnnnnnnnnnnnnnnn => meh,
26
27         Patternnnnnnnnnnnnnnnnnnn |
28         Patternnnnnnnnnnnnnnnnnnn if looooooooooooooooooong_guard => meh,
29
30         Patternnnnnnnnnnnnnnnnnnnnnnnnn |
31         Patternnnnnnnnnnnnnnnnnnnnnnnnn if looooooooooooooooooooooooooooooooooooooooong_guard =>
32             meh,
33
34         // Test that earlier patterns can take the guard space
35         (aaaa,
36          bbbbb,
37          ccccccc,
38          aaaaa,
39          bbbbbbbb,
40          cccccc,
41          aaaa,
42          bbbbbbbb,
43          cccccc,
44          dddddd) |
45         Patternnnnnnnnnnnnnnnnnnnnnnnnn if loooooooooooooooooooooooooooooooooooooooooong_guard => {}
46
47         _ => {}
48         ast::PathParameters::AngleBracketedParameters(ref data) if data.lifetimes.len() > 0 ||
49                                                                    data.types.len() > 0 ||
50                                                                    data.bindings.len() > 0 => {}
51     }
52
53     let whatever = match something {
54         /// DOC COMMENT!
55         Some(_) => 42,
56         // Comment on an attribute.
57         #[an_attribute]
58         // Comment after an attribute.
59         None => 0,
60         #[rustfmt_skip]
61         Blurb     =>     {                  }
62     };
63 }
64
65 // Test that a match on an overflow line is laid out properly.
66 fn main() {
67     let sub_span =
68         match xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx {
69             Some(sub_span) => Some(sub_span),
70             None => sub_span,
71         };
72 }
73
74 // Test that one-line bodies align.
75 fn main() {
76     match r {
77         Variableeeeeeeeeeeeeeeeee => ("variable",
78                                       vec!["id", "name", "qualname", "value", "type", "scopeid"],
79                                       true,
80                                       true),
81         Enummmmmmmmmmmmmmmmmmmmm => ("enum",
82                                      vec!["id", "qualname", "scopeid", "value"],
83                                      true,
84                                      true),
85         Variantttttttttttttttttttttttt =>
86             ("variant",
87              vec!["id", "name", "qualname", "type", "value", "scopeid"],
88              true,
89              true),
90     }
91 }
92
93 fn matches() {
94     match 1 {
95         -1 => 10,
96         1 => 1, // foo
97         2 => 2,
98         // bar
99         3 => 3,
100         _ => 0, // baz
101     }
102 }
103
104 fn issue339() {
105     match a {
106         b => {}
107         c => {}
108         d => {}
109         e => {}
110         // collapsing here is safe
111         ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff => {}
112         // collapsing here exceeds line length
113         ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffg => {
114         }
115         h => { // comment above block
116         }
117         i => {} // comment below block
118         j => {
119             // comment inside block
120         }
121         j2 => {
122             // comments inside...
123         } // ... and after
124         // TODO uncomment when vertical whitespace is handled better
125         // k => {
126         //
127         //     // comment with WS above
128         // }
129         // l => {
130         //     // comment with ws below
131         //
132         // }
133         m => {}
134         n => {}
135         o => {}
136         p => { // Dont collapse me
137         }
138         q => {}
139         r => {}
140         s => 0, // s comment
141         // t comment
142         t => 1,
143         u => 2,
144         // TODO uncomment when block-support exists
145         // v => {
146         // } /* funky block
147         //    * comment */
148         // final comment
149     }
150 }
151
152 fn issue355() {
153     match mac {
154         a => println!("a", b),
155         b => vec![1, 2],
156         c => vec!(3; 4),
157         d => {
158             println!("a", b)
159         }
160         e => {
161             vec![1, 2]
162         }
163         f => {
164             vec!(3; 4)
165         }
166         h => println!("a", b), // h comment
167         i => vec![1, 2], // i comment
168         j => vec!(3; 4), // j comment
169         // k comment
170         k => println!("a", b),
171         // l comment
172         l => vec![1, 2],
173         // m comment
174         m => vec!(3; 4),
175         // Rewrite splits macro
176         nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn =>
177             println!("a", b),
178         // Rewrite splits macro
179         oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo =>
180             vec![1, 2],
181         // Macro support fails to recognise this macro as splitable
182         // We push the whole expr to a new line, TODO split this macro as well
183         pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp =>
184             vec!(3; 4),
185         // q, r and s: Rewrite splits match arm
186         qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq =>
187             println!("a", b),
188         rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr =>
189             vec![1, 2],
190         ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss =>
191             vec!(3; 4),
192         // Funky bracketing styles
193         t => println!{"a", b},
194         u => vec![1, 2],
195         v => vec!{3; 4},
196         w => println!["a", b],
197         x => vec![1, 2],
198         y => vec![3; 4],
199         // Brackets with comments
200         tc => println!{"a", b}, // comment
201         uc => vec![1, 2], // comment
202         vc => vec!{3; 4}, // comment
203         wc => println!["a", b], // comment
204         xc => vec![1, 2], // comment
205         yc => vec![3; 4], // comment
206         yd => looooooooooooooooooooooooooooooooooooooooooooooooooooooooong_func(aaaaaaaaaa,
207                                                                                 bbbbbbbbbb,
208                                                                                 cccccccccc,
209                                                                                 dddddddddd),
210     }
211 }
212
213 fn issue280() {
214     {
215         match x {
216             CompressionMode::DiscardNewline | CompressionMode::CompressWhitespaceNewline =>
217                 ch == '\n',
218             ast::ItemConst(ref typ, ref expr) =>
219                 self.process_static_or_const_item(item, &typ, &expr),
220         }
221     }
222 }
223
224 fn issue383() {
225     match resolution.last_private {
226         LastImport{..} => false,
227         _ => true,
228     }
229 }