From a55ef9b3ed66a057bb3e58ab698f26e58afb5b7d Mon Sep 17 00:00:00 2001 From: Daniel McNab <36049421+DJMcNab@users.noreply.github.com> Date: Wed, 3 Oct 2018 21:47:03 +0100 Subject: [PATCH] Support leading pipe in match arms --- .../ra_syntax/src/grammar/expressions/atom.rs | 3 + .../data/parser/inline/0069_match_arm.rs | 2 + .../data/parser/inline/0069_match_arm.txt | 66 +++++++++++++++---- 3 files changed, 59 insertions(+), 12 deletions(-) diff --git a/crates/ra_syntax/src/grammar/expressions/atom.rs b/crates/ra_syntax/src/grammar/expressions/atom.rs index f01df56bc6..a720d255f8 100644 --- a/crates/ra_syntax/src/grammar/expressions/atom.rs +++ b/crates/ra_syntax/src/grammar/expressions/atom.rs @@ -319,10 +319,13 @@ pub(crate) fn match_arm_list(p: &mut Parser) { // match () { // _ => (), // X | Y if Z => (), +// | X | Y if Z => (), +// | X => (), // }; // } fn match_arm(p: &mut Parser) -> BlockLike { let m = p.start(); + p.eat(PIPE); patterns::pattern_r(p, TokenSet::EMPTY); while p.eat(PIPE) { patterns::pattern(p); diff --git a/crates/ra_syntax/tests/data/parser/inline/0069_match_arm.rs b/crates/ra_syntax/tests/data/parser/inline/0069_match_arm.rs index 2c0e884145..b23a12500c 100644 --- a/crates/ra_syntax/tests/data/parser/inline/0069_match_arm.rs +++ b/crates/ra_syntax/tests/data/parser/inline/0069_match_arm.rs @@ -2,5 +2,7 @@ fn foo() { match () { _ => (), X | Y if Z => (), + | X | Y if Z => (), + | X => (), }; } diff --git a/crates/ra_syntax/tests/data/parser/inline/0069_match_arm.txt b/crates/ra_syntax/tests/data/parser/inline/0069_match_arm.txt index 013d1716ae..f862b12683 100644 --- a/crates/ra_syntax/tests/data/parser/inline/0069_match_arm.txt +++ b/crates/ra_syntax/tests/data/parser/inline/0069_match_arm.txt @@ -1,5 +1,5 @@ -ROOT@[0; 78) - FN_DEF@[0; 77) +ROOT@[0; 125) + FN_DEF@[0; 124) FN_KW@[0; 2) WHITESPACE@[2; 3) NAME@[3; 6) @@ -8,18 +8,18 @@ ROOT@[0; 78) L_PAREN@[6; 7) R_PAREN@[7; 8) WHITESPACE@[8; 9) - BLOCK@[9; 77) + BLOCK@[9; 124) L_CURLY@[9; 10) WHITESPACE@[10; 15) - EXPR_STMT@[15; 75) - MATCH_EXPR@[15; 74) + EXPR_STMT@[15; 122) + MATCH_EXPR@[15; 121) MATCH_KW@[15; 20) WHITESPACE@[20; 21) TUPLE_EXPR@[21; 23) L_PAREN@[21; 22) R_PAREN@[22; 23) WHITESPACE@[23; 24) - MATCH_ARM_LIST@[24; 74) + MATCH_ARM_LIST@[24; 121) L_CURLY@[24; 25) WHITESPACE@[25; 34) MATCH_ARM@[34; 41) @@ -58,9 +58,51 @@ ROOT@[0; 78) L_PAREN@[65; 66) R_PAREN@[66; 67) COMMA@[67; 68) - WHITESPACE@[68; 73) - R_CURLY@[73; 74) - SEMI@[74; 75) - WHITESPACE@[75; 76) - R_CURLY@[76; 77) - WHITESPACE@[77; 78) + WHITESPACE@[68; 77) + MATCH_ARM@[77; 95) + PIPE@[77; 78) + WHITESPACE@[78; 79) + BIND_PAT@[79; 80) + NAME@[79; 80) + IDENT@[79; 80) "X" + WHITESPACE@[80; 81) + PIPE@[81; 82) + WHITESPACE@[82; 83) + BIND_PAT@[83; 84) + NAME@[83; 84) + IDENT@[83; 84) "Y" + WHITESPACE@[84; 85) + IF_KW@[85; 87) + WHITESPACE@[87; 88) + PATH_EXPR@[88; 89) + PATH@[88; 89) + PATH_SEGMENT@[88; 89) + NAME_REF@[88; 89) + IDENT@[88; 89) "Z" + WHITESPACE@[89; 90) + FAT_ARROW@[90; 92) + WHITESPACE@[92; 93) + TUPLE_EXPR@[93; 95) + L_PAREN@[93; 94) + R_PAREN@[94; 95) + COMMA@[95; 96) + WHITESPACE@[96; 105) + MATCH_ARM@[105; 114) + PIPE@[105; 106) + WHITESPACE@[106; 107) + BIND_PAT@[107; 108) + NAME@[107; 108) + IDENT@[107; 108) "X" + WHITESPACE@[108; 109) + FAT_ARROW@[109; 111) + WHITESPACE@[111; 112) + TUPLE_EXPR@[112; 114) + L_PAREN@[112; 113) + R_PAREN@[113; 114) + COMMA@[114; 115) + WHITESPACE@[115; 120) + R_CURLY@[120; 121) + SEMI@[121; 122) + WHITESPACE@[122; 123) + R_CURLY@[123; 124) + WHITESPACE@[124; 125)