Skip to content

Commit 4de447b

Browse files
committed
Attach comma token to MATCH_ARM instead of MATCH_ARM_LIST
1 parent 8d3b294 commit 4de447b

15 files changed

+113
-121
lines changed

crates/ide/src/join_lines.rs

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,10 @@ use std::convert::TryFrom;
33
use ide_assists::utils::extract_trivial_expression;
44
use itertools::Itertools;
55
use syntax::{
6-
algo::non_trivia_sibling,
76
ast::{self, AstNode, AstToken, IsString},
8-
Direction, NodeOrToken, SourceFile, SyntaxElement,
7+
NodeOrToken, SourceFile, SyntaxElement,
98
SyntaxKind::{self, USE_TREE, WHITESPACE},
10-
SyntaxNode, SyntaxToken, TextRange, TextSize, T,
9+
SyntaxToken, TextRange, TextSize, T,
1110
};
1211

1312
use text_edit::{TextEdit, TextEditBuilder};
@@ -204,13 +203,6 @@ fn remove_newline(
204203
edit.replace(token.text_range(), compute_ws(prev.kind(), next.kind()).to_string());
205204
}
206205

207-
fn has_comma_after(node: &SyntaxNode) -> bool {
208-
match non_trivia_sibling(node.clone().into(), Direction::Next) {
209-
Some(n) => n.kind() == T![,],
210-
_ => false,
211-
}
212-
}
213-
214206
fn join_single_expr_block(edit: &mut TextEditBuilder, token: &SyntaxToken) -> Option<()> {
215207
let block_expr = ast::BlockExpr::cast(token.parent()?)?;
216208
if !block_expr.is_standalone() {
@@ -223,7 +215,7 @@ fn join_single_expr_block(edit: &mut TextEditBuilder, token: &SyntaxToken) -> Op
223215

224216
// Match block needs to have a comma after the block
225217
if let Some(match_arm) = block_expr.syntax().parent().and_then(ast::MatchArm::cast) {
226-
if !has_comma_after(match_arm.syntax()) {
218+
if match_arm.comma_token().is_none() {
227219
buf.push(',');
228220
}
229221
}

crates/ide/src/move_item.rs

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -205,16 +205,16 @@ fn main() {
205205
}
206206
"#,
207207
expect![[r#"
208-
fn main() {
209-
match true {
210-
false =>$0 {
211-
println!("Test");
212-
},
213-
true => {
214-
println!("Hello, world");
215-
}
216-
};
217-
}
208+
fn main() {
209+
match true {
210+
false =>$0 {
211+
println!("Test");
212+
}
213+
true => {
214+
println!("Hello, world");
215+
},
216+
};
217+
}
218218
"#]],
219219
Direction::Up,
220220
);
@@ -236,16 +236,16 @@ fn main() {
236236
}
237237
"#,
238238
expect![[r#"
239-
fn main() {
240-
match true {
241-
false => {
242-
println!("Test");
243-
},
244-
true =>$0 {
245-
println!("Hello, world");
246-
}
247-
};
248-
}
239+
fn main() {
240+
match true {
241+
false => {
242+
println!("Test");
243+
}
244+
true =>$0 {
245+
println!("Hello, world");
246+
},
247+
};
248+
}
249249
"#]],
250250
Direction::Down,
251251
);

crates/parser/src/grammar/expressions/atom.rs

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -400,20 +400,7 @@ pub(crate) fn match_arm_list(p: &mut Parser) {
400400
error_block(p, "expected match arm");
401401
continue;
402402
}
403-
404-
// test match_arms_commas
405-
// fn foo() {
406-
// match () {
407-
// _ => (),
408-
// _ => {}
409-
// _ => ()
410-
// }
411-
// }
412-
if match_arm(p).is_block() {
413-
p.eat(T![,]);
414-
} else if !p.at(T!['}']) {
415-
p.expect(T![,]);
416-
}
403+
match_arm(p);
417404
}
418405
p.expect(T!['}']);
419406
m.complete(p, MATCH_ARM_LIST);
@@ -429,7 +416,7 @@ pub(crate) fn match_arm_list(p: &mut Parser) {
429416
// | X => (),
430417
// };
431418
// }
432-
fn match_arm(p: &mut Parser) -> BlockLike {
419+
fn match_arm(p: &mut Parser) {
433420
let m = p.start();
434421
// test match_arms_outer_attributes
435422
// fn foo() {
@@ -452,8 +439,21 @@ fn match_arm(p: &mut Parser) -> BlockLike {
452439
}
453440
p.expect(T![=>]);
454441
let blocklike = expr_stmt(p).1;
442+
443+
// test match_arms_commas
444+
// fn foo() {
445+
// match () {
446+
// _ => (),
447+
// _ => {}
448+
// _ => ()
449+
// }
450+
// }
451+
if blocklike.is_block() {
452+
p.eat(T![,]);
453+
} else if !p.at(T!['}']) {
454+
p.expect(T![,]);
455+
}
455456
m.complete(p, MATCH_ARM);
456-
blocklike
457457
}
458458

459459
// test match_guard

crates/syntax/test_data/parser/err/0032_match_arms_inner_attrs.rast

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ SOURCE_FILE@0..293
2222
MATCH_ARM_LIST@24..101
2323
L_CURLY@24..25 "{"
2424
WHITESPACE@25..34 "\n "
25-
MATCH_ARM@34..41
25+
MATCH_ARM@34..42
2626
WILDCARD_PAT@34..35
2727
UNDERSCORE@34..35 "_"
2828
WHITESPACE@35..36 " "
@@ -31,7 +31,7 @@ SOURCE_FILE@0..293
3131
TUPLE_EXPR@39..41
3232
L_PAREN@39..40 "("
3333
R_PAREN@40..41 ")"
34-
COMMA@41..42 ","
34+
COMMA@41..42 ","
3535
WHITESPACE@42..51 "\n "
3636
MATCH_ARM@51..78
3737
ATTR@51..52
@@ -53,7 +53,7 @@ SOURCE_FILE@0..293
5353
R_PAREN@76..77 ")"
5454
R_BRACK@77..78 "]"
5555
WHITESPACE@78..87 "\n "
56-
MATCH_ARM@87..94
56+
MATCH_ARM@87..95
5757
WILDCARD_PAT@87..88
5858
UNDERSCORE@87..88 "_"
5959
WHITESPACE@88..89 " "
@@ -62,7 +62,7 @@ SOURCE_FILE@0..293
6262
TUPLE_EXPR@92..94
6363
L_PAREN@92..93 "("
6464
R_PAREN@93..94 ")"
65-
COMMA@94..95 ","
65+
COMMA@94..95 ","
6666
WHITESPACE@95..100 "\n "
6767
R_CURLY@100..101 "}"
6868
WHITESPACE@101..107 "\n\n "
@@ -77,7 +77,7 @@ SOURCE_FILE@0..293
7777
MATCH_ARM_LIST@116..185
7878
L_CURLY@116..117 "{"
7979
WHITESPACE@117..126 "\n "
80-
MATCH_ARM@126..133
80+
MATCH_ARM@126..134
8181
WILDCARD_PAT@126..127
8282
UNDERSCORE@126..127 "_"
8383
WHITESPACE@127..128 " "
@@ -86,9 +86,9 @@ SOURCE_FILE@0..293
8686
TUPLE_EXPR@131..133
8787
L_PAREN@131..132 "("
8888
R_PAREN@132..133 ")"
89-
COMMA@133..134 ","
89+
COMMA@133..134 ","
9090
WHITESPACE@134..143 "\n "
91-
MATCH_ARM@143..150
91+
MATCH_ARM@143..151
9292
WILDCARD_PAT@143..144
9393
UNDERSCORE@143..144 "_"
9494
WHITESPACE@144..145 " "
@@ -97,7 +97,7 @@ SOURCE_FILE@0..293
9797
TUPLE_EXPR@148..150
9898
L_PAREN@148..149 "("
9999
R_PAREN@149..150 ")"
100-
COMMA@150..151 ","
100+
COMMA@150..151 ","
101101
WHITESPACE@151..160 "\n "
102102
MATCH_ARM@160..179
103103
ATTR@160..161
@@ -165,7 +165,7 @@ SOURCE_FILE@0..293
165165
R_PAREN@248..249 ")"
166166
R_BRACK@249..250 "]"
167167
WHITESPACE@250..259 "\n "
168-
MATCH_ARM@259..266
168+
MATCH_ARM@259..267
169169
WILDCARD_PAT@259..260
170170
UNDERSCORE@259..260 "_"
171171
WHITESPACE@260..261 " "
@@ -174,9 +174,9 @@ SOURCE_FILE@0..293
174174
TUPLE_EXPR@264..266
175175
L_PAREN@264..265 "("
176176
R_PAREN@265..266 ")"
177-
COMMA@266..267 ","
177+
COMMA@266..267 ","
178178
WHITESPACE@267..276 "\n "
179-
MATCH_ARM@276..283
179+
MATCH_ARM@276..284
180180
WILDCARD_PAT@276..277
181181
UNDERSCORE@276..277 "_"
182182
WHITESPACE@277..278 " "
@@ -185,7 +185,7 @@ SOURCE_FILE@0..293
185185
TUPLE_EXPR@281..283
186186
L_PAREN@281..282 "("
187187
R_PAREN@282..283 ")"
188-
COMMA@283..284 ","
188+
COMMA@283..284 ","
189189
WHITESPACE@284..289 "\n "
190190
R_CURLY@289..290 "}"
191191
WHITESPACE@290..291 "\n"

crates/syntax/test_data/parser/err/0033_match_arms_outer_attrs.rast

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ SOURCE_FILE@0..89
2121
MATCH_ARM_LIST@24..86
2222
L_CURLY@24..25 "{"
2323
WHITESPACE@25..34 "\n "
24-
MATCH_ARM@34..41
24+
MATCH_ARM@34..42
2525
WILDCARD_PAT@34..35
2626
UNDERSCORE@34..35 "_"
2727
WHITESPACE@35..36 " "
@@ -30,9 +30,9 @@ SOURCE_FILE@0..89
3030
TUPLE_EXPR@39..41
3131
L_PAREN@39..40 "("
3232
R_PAREN@40..41 ")"
33-
COMMA@41..42 ","
33+
COMMA@41..42 ","
3434
WHITESPACE@42..51 "\n "
35-
MATCH_ARM@51..58
35+
MATCH_ARM@51..59
3636
WILDCARD_PAT@51..52
3737
UNDERSCORE@51..52 "_"
3838
WHITESPACE@52..53 " "
@@ -41,7 +41,7 @@ SOURCE_FILE@0..89
4141
TUPLE_EXPR@56..58
4242
L_PAREN@56..57 "("
4343
R_PAREN@57..58 ")"
44-
COMMA@58..59 ","
44+
COMMA@58..59 ","
4545
WHITESPACE@59..68 "\n "
4646
MATCH_ARM@68..80
4747
ATTR@68..80

crates/syntax/test_data/parser/inline/ok/0055_literal_pattern.rast

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ SOURCE_FILE@0..113
2121
MATCH_ARM_LIST@25..110
2222
L_CURLY@25..26 "{"
2323
WHITESPACE@26..35 "\n "
24-
MATCH_ARM@35..43
24+
MATCH_ARM@35..44
2525
LITERAL_PAT@35..37
2626
MINUS@35..36 "-"
2727
LITERAL@36..37
@@ -32,9 +32,9 @@ SOURCE_FILE@0..113
3232
TUPLE_EXPR@41..43
3333
L_PAREN@41..42 "("
3434
R_PAREN@42..43 ")"
35-
COMMA@43..44 ","
35+
COMMA@43..44 ","
3636
WHITESPACE@44..53 "\n "
37-
MATCH_ARM@53..61
37+
MATCH_ARM@53..62
3838
LITERAL_PAT@53..55
3939
LITERAL@53..55
4040
INT_NUMBER@53..55 "92"
@@ -44,9 +44,9 @@ SOURCE_FILE@0..113
4444
TUPLE_EXPR@59..61
4545
L_PAREN@59..60 "("
4646
R_PAREN@60..61 ")"
47-
COMMA@61..62 ","
47+
COMMA@61..62 ","
4848
WHITESPACE@62..71 "\n "
49-
MATCH_ARM@71..80
49+
MATCH_ARM@71..81
5050
LITERAL_PAT@71..74
5151
LITERAL@71..74
5252
CHAR@71..74 "'c'"
@@ -56,9 +56,9 @@ SOURCE_FILE@0..113
5656
TUPLE_EXPR@78..80
5757
L_PAREN@78..79 "("
5858
R_PAREN@79..80 ")"
59-
COMMA@80..81 ","
59+
COMMA@80..81 ","
6060
WHITESPACE@81..90 "\n "
61-
MATCH_ARM@90..103
61+
MATCH_ARM@90..104
6262
LITERAL_PAT@90..97
6363
LITERAL@90..97
6464
STRING@90..97 "\"hello\""
@@ -68,7 +68,7 @@ SOURCE_FILE@0..113
6868
TUPLE_EXPR@101..103
6969
L_PAREN@101..102 "("
7070
R_PAREN@102..103 ")"
71-
COMMA@103..104 ","
71+
COMMA@103..104 ","
7272
WHITESPACE@104..109 "\n "
7373
R_CURLY@109..110 "}"
7474
WHITESPACE@110..111 "\n"

crates/syntax/test_data/parser/inline/ok/0058_range_pat.rast

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ SOURCE_FILE@0..112
2020
MATCH_ARM_LIST@25..109
2121
L_CURLY@25..26 "{"
2222
WHITESPACE@26..35 "\n "
23-
MATCH_ARM@35..50
23+
MATCH_ARM@35..51
2424
RANGE_PAT@35..44
2525
LITERAL_PAT@35..36
2626
LITERAL@35..36
@@ -37,9 +37,9 @@ SOURCE_FILE@0..112
3737
TUPLE_EXPR@48..50
3838
L_PAREN@48..49 "("
3939
R_PAREN@49..50 ")"
40-
COMMA@50..51 ","
40+
COMMA@50..51 ","
4141
WHITESPACE@51..60 "\n "
42-
MATCH_ARM@60..77
42+
MATCH_ARM@60..78
4343
RANGE_PAT@60..71
4444
LITERAL_PAT@60..63
4545
LITERAL@60..63
@@ -56,9 +56,9 @@ SOURCE_FILE@0..112
5656
TUPLE_EXPR@75..77
5757
L_PAREN@75..76 "("
5858
R_PAREN@76..77 ")"
59-
COMMA@77..78 ","
59+
COMMA@77..78 ","
6060
WHITESPACE@78..87 "\n "
61-
MATCH_ARM@87..102
61+
MATCH_ARM@87..103
6262
RANGE_PAT@87..97
6363
LITERAL_PAT@87..90
6464
LITERAL@87..90
@@ -74,7 +74,7 @@ SOURCE_FILE@0..112
7474
TUPLE_EXPR@100..102
7575
L_PAREN@100..101 "("
7676
R_PAREN@101..102 ")"
77-
COMMA@102..103 ","
77+
COMMA@102..103 ","
7878
WHITESPACE@103..108 "\n "
7979
R_CURLY@108..109 "}"
8080
WHITESPACE@109..110 "\n"

crates/syntax/test_data/parser/inline/ok/0059_match_arms_commas.rast

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ SOURCE_FILE@0..83
2121
MATCH_ARM_LIST@24..80
2222
L_CURLY@24..25 "{"
2323
WHITESPACE@25..34 "\n "
24-
MATCH_ARM@34..41
24+
MATCH_ARM@34..42
2525
WILDCARD_PAT@34..35
2626
UNDERSCORE@34..35 "_"
2727
WHITESPACE@35..36 " "
@@ -30,7 +30,7 @@ SOURCE_FILE@0..83
3030
TUPLE_EXPR@39..41
3131
L_PAREN@39..40 "("
3232
R_PAREN@40..41 ")"
33-
COMMA@41..42 ","
33+
COMMA@41..42 ","
3434
WHITESPACE@42..51 "\n "
3535
MATCH_ARM@51..58
3636
WILDCARD_PAT@51..52

0 commit comments

Comments
 (0)