]> git.lizzy.rs Git - rust.git/blob - tests/target/match.rs
d7227a0da59cc1be76012d5fb70d065640cd026a
[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, bbbbb, ccccccc, aaaaa, bbbbbbbb, cccccc, aaaa, bbbbbbbb, cccccc, dddddd) |
36         Patternnnnnnnnnnnnnnnnnnnnnnnnn if loooooooooooooooooooooooooooooooooooooooooong_guard => {}
37
38         _ => {}
39         ast::PathParameters::AngleBracketedParameters(ref data) if data.lifetimes.len() > 0 ||
40                                                                    data.types.len() > 0 ||
41                                                                    data.bindings.len() > 0 => {}
42     }
43
44     let whatever = match something {
45         /// DOC COMMENT!
46         Some(_) => 42,
47         // Comment on an attribute.
48         #[an_attribute]
49         // Comment after an attribute.
50         None => 0,
51         #[rustfmt_skip]
52         Blurb     =>     {                  }
53     };
54 }
55
56 // Test that a match on an overflow line is laid out properly.
57 fn main() {
58     let sub_span =
59         match xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx {
60             Some(sub_span) => Some(sub_span),
61             None => sub_span,
62         };
63 }
64
65 // Test that one-line bodies align.
66 fn main() {
67     match r {
68         Variableeeeeeeeeeeeeeeeee => ("variable",
69                                       vec!("id", "name", "qualname", "value", "type", "scopeid"),
70                                       true,
71                                       true),
72         Enummmmmmmmmmmmmmmmmmmmm => ("enum",
73                                      vec!("id", "qualname", "scopeid", "value"),
74                                      true,
75                                      true),
76         Variantttttttttttttttttttttttt =>
77             ("variant",
78              vec!("id", "name", "qualname", "type", "value", "scopeid"),
79              true,
80              true),
81     }
82 }
83
84 fn matches() {
85     match 1 {
86         1 => 1, // foo
87         2 => 2,
88         // bar
89         3 => 3,
90         _ => 0, // baz
91     }
92 }
93
94 fn issue339() {
95     match a {
96         b => {}
97         c => {}
98         d => {}
99         e => {}
100         // collapsing here is safe
101         ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff => {}
102         // collapsing here exceeds line length
103         ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffg => {
104         }
105         h => { // comment above block
106         }
107         i => {} // comment below block
108         j => {
109             // comment inside block
110         }
111         j2 => {
112             // comments inside...
113         } // ... and after
114         // TODO uncomment when vertical whitespace is handled better
115         // k => {
116         //
117         //     // comment with WS above
118         // }
119         // l => {
120         //     // comment with ws below
121         //
122         // }
123         m => {}
124         n => {}
125         o => {}
126         p => { // Dont collapse me
127         }
128         q => {}
129         r => {}
130         s => 0, // s comment
131         // t comment
132         t => 1,
133         u => 2,
134         // TODO uncomment when block-support exists
135         // v => {
136         // } /* funky block
137         //    * comment */
138         // final comment
139     }
140 }
141
142 fn issue355() {
143     match mac {
144         a => println!("a", b),
145         b => vec!(1, 2),
146         c => vec!(3; 4),
147         d => {
148             println!("a", b)
149         }
150         e => {
151             vec!(1, 2)
152         }
153         f => {
154             vec!(3; 4)
155         }
156         h => println!("a", b), // h comment
157         i => vec!(1, 2), // i comment
158         j => vec!(3; 4), // j comment
159         // k comment
160         k => println!("a", b),
161         // l comment
162         l => vec!(1, 2),
163         // m comment
164         m => vec!(3; 4),
165         // Rewrite splits macro
166         nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn =>
167             println!("a", b),
168         // Rewrite splits macro
169         oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo =>
170             vec!(1, 2),
171         // Macro support fails to recognise this macro as splitable
172         // We push the whole expr to a new line, TODO split this macro as well
173         pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp =>
174             vec!(3; 4),
175         // q, r and s: Rewrite splits match arm
176         qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq =>
177             println!("a", b),
178         rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr =>
179             vec!(1, 2),
180         ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss =>
181             vec!(3; 4),
182         // Funky bracketing styles
183         t => println!{"a", b},
184         u => vec!{1, 2},
185         v => vec!{3; 4},
186         w => println!["a", b],
187         x => vec![1, 2],
188         y => vec![3; 4],
189         // Brackets with comments
190         tc => println!{"a", b}, // comment
191         uc => vec!{1, 2}, // comment
192         vc => vec!{3; 4}, // comment
193         wc => println!["a", b], // comment
194         xc => vec![1, 2], // comment
195         yc => vec![3; 4], // comment
196         yd => looooooooooooooooooooooooooooooooooooooooooooooooooooooooong_func(aaaaaaaaaa,
197                                                                                 bbbbbbbbbb,
198                                                                                 cccccccccc,
199                                                                                 dddddddddd),
200     }
201 }