From 1c97c1ac11459d45f7bfc57dc72428d2b294520c Mon Sep 17 00:00:00 2001 From: Ville Penttinen Date: Sun, 17 Feb 2019 19:08:34 +0200 Subject: Enable parsing of attributes inside a match block We allow invalid inner attributes to be parsed, e.g. inner attributes that are not directly after the opening brace of the match block. Instead we run validation on `MatchArmList` to allow better reporting of errors. --- .../inline/ok/0120_match_arms_inner_attribute.rs | 8 ++ .../inline/ok/0120_match_arms_inner_attribute.txt | 74 +++++++++++ .../inline/ok/0121_match_arms_outer_attributes.rs | 12 ++ .../inline/ok/0121_match_arms_outer_attributes.txt | 135 +++++++++++++++++++++ 4 files changed, 229 insertions(+) create mode 100644 crates/ra_syntax/tests/data/parser/inline/ok/0120_match_arms_inner_attribute.rs create mode 100644 crates/ra_syntax/tests/data/parser/inline/ok/0120_match_arms_inner_attribute.txt create mode 100644 crates/ra_syntax/tests/data/parser/inline/ok/0121_match_arms_outer_attributes.rs create mode 100644 crates/ra_syntax/tests/data/parser/inline/ok/0121_match_arms_outer_attributes.txt (limited to 'crates/ra_syntax/tests/data/parser/inline/ok') diff --git a/crates/ra_syntax/tests/data/parser/inline/ok/0120_match_arms_inner_attribute.rs b/crates/ra_syntax/tests/data/parser/inline/ok/0120_match_arms_inner_attribute.rs new file mode 100644 index 000000000..54a67c9d7 --- /dev/null +++ b/crates/ra_syntax/tests/data/parser/inline/ok/0120_match_arms_inner_attribute.rs @@ -0,0 +1,8 @@ +fn foo() { + match () { + #![doc("Inner attribute")] + #![doc("Can be")] + #![doc("Stacked")] + _ => (), + } +} diff --git a/crates/ra_syntax/tests/data/parser/inline/ok/0120_match_arms_inner_attribute.txt b/crates/ra_syntax/tests/data/parser/inline/ok/0120_match_arms_inner_attribute.txt new file mode 100644 index 000000000..b39a217bd --- /dev/null +++ b/crates/ra_syntax/tests/data/parser/inline/ok/0120_match_arms_inner_attribute.txt @@ -0,0 +1,74 @@ +SOURCE_FILE@[0; 139) + FN_DEF@[0; 138) + FN_KW@[0; 2) + WHITESPACE@[2; 3) + NAME@[3; 6) + IDENT@[3; 6) "foo" + PARAM_LIST@[6; 8) + L_PAREN@[6; 7) + R_PAREN@[7; 8) + WHITESPACE@[8; 9) + BLOCK@[9; 138) + L_CURLY@[9; 10) + WHITESPACE@[10; 15) + MATCH_EXPR@[15; 136) + 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; 136) + L_CURLY@[24; 25) + WHITESPACE@[25; 34) + ATTR@[34; 60) + POUND@[34; 35) + EXCL@[35; 36) + TOKEN_TREE@[36; 60) + L_BRACK@[36; 37) + IDENT@[37; 40) "doc" + TOKEN_TREE@[40; 59) + L_PAREN@[40; 41) + STRING@[41; 58) + R_PAREN@[58; 59) + R_BRACK@[59; 60) + WHITESPACE@[60; 69) + ATTR@[69; 86) + POUND@[69; 70) + EXCL@[70; 71) + TOKEN_TREE@[71; 86) + L_BRACK@[71; 72) + IDENT@[72; 75) "doc" + TOKEN_TREE@[75; 85) + L_PAREN@[75; 76) + STRING@[76; 84) + R_PAREN@[84; 85) + R_BRACK@[85; 86) + WHITESPACE@[86; 95) + ATTR@[95; 113) + POUND@[95; 96) + EXCL@[96; 97) + TOKEN_TREE@[97; 113) + L_BRACK@[97; 98) + IDENT@[98; 101) "doc" + TOKEN_TREE@[101; 112) + L_PAREN@[101; 102) + STRING@[102; 111) + R_PAREN@[111; 112) + R_BRACK@[112; 113) + WHITESPACE@[113; 122) + MATCH_ARM@[122; 129) + PLACEHOLDER_PAT@[122; 123) + UNDERSCORE@[122; 123) + WHITESPACE@[123; 124) + FAT_ARROW@[124; 126) + WHITESPACE@[126; 127) + TUPLE_EXPR@[127; 129) + L_PAREN@[127; 128) + R_PAREN@[128; 129) + COMMA@[129; 130) + WHITESPACE@[130; 135) + R_CURLY@[135; 136) + WHITESPACE@[136; 137) + R_CURLY@[137; 138) + WHITESPACE@[138; 139) diff --git a/crates/ra_syntax/tests/data/parser/inline/ok/0121_match_arms_outer_attributes.rs b/crates/ra_syntax/tests/data/parser/inline/ok/0121_match_arms_outer_attributes.rs new file mode 100644 index 000000000..676db42d1 --- /dev/null +++ b/crates/ra_syntax/tests/data/parser/inline/ok/0121_match_arms_outer_attributes.rs @@ -0,0 +1,12 @@ +fn foo() { + match () { + #[cfg(feature = "some")] + _ => (), + #[cfg(feature = "other")] + _ => (), + #[cfg(feature = "many")] + #[cfg(feature = "attributes")] + #[cfg(feature = "before")] + _ => (), + } +} diff --git a/crates/ra_syntax/tests/data/parser/inline/ok/0121_match_arms_outer_attributes.txt b/crates/ra_syntax/tests/data/parser/inline/ok/0121_match_arms_outer_attributes.txt new file mode 100644 index 000000000..c888fb8f0 --- /dev/null +++ b/crates/ra_syntax/tests/data/parser/inline/ok/0121_match_arms_outer_attributes.txt @@ -0,0 +1,135 @@ +SOURCE_FILE@[0; 259) + FN_DEF@[0; 258) + FN_KW@[0; 2) + WHITESPACE@[2; 3) + NAME@[3; 6) + IDENT@[3; 6) "foo" + PARAM_LIST@[6; 8) + L_PAREN@[6; 7) + R_PAREN@[7; 8) + WHITESPACE@[8; 9) + BLOCK@[9; 258) + L_CURLY@[9; 10) + WHITESPACE@[10; 15) + MATCH_EXPR@[15; 256) + 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; 256) + L_CURLY@[24; 25) + WHITESPACE@[25; 34) + ATTR@[34; 58) + POUND@[34; 35) + TOKEN_TREE@[35; 58) + L_BRACK@[35; 36) + IDENT@[36; 39) "cfg" + TOKEN_TREE@[39; 57) + L_PAREN@[39; 40) + IDENT@[40; 47) "feature" + WHITESPACE@[47; 48) + EQ@[48; 49) + WHITESPACE@[49; 50) + STRING@[50; 56) + R_PAREN@[56; 57) + R_BRACK@[57; 58) + WHITESPACE@[58; 67) + MATCH_ARM@[67; 74) + PLACEHOLDER_PAT@[67; 68) + UNDERSCORE@[67; 68) + WHITESPACE@[68; 69) + FAT_ARROW@[69; 71) + WHITESPACE@[71; 72) + TUPLE_EXPR@[72; 74) + L_PAREN@[72; 73) + R_PAREN@[73; 74) + COMMA@[74; 75) + WHITESPACE@[75; 84) + ATTR@[84; 109) + POUND@[84; 85) + TOKEN_TREE@[85; 109) + L_BRACK@[85; 86) + IDENT@[86; 89) "cfg" + TOKEN_TREE@[89; 108) + L_PAREN@[89; 90) + IDENT@[90; 97) "feature" + WHITESPACE@[97; 98) + EQ@[98; 99) + WHITESPACE@[99; 100) + STRING@[100; 107) + R_PAREN@[107; 108) + R_BRACK@[108; 109) + WHITESPACE@[109; 118) + MATCH_ARM@[118; 125) + PLACEHOLDER_PAT@[118; 119) + UNDERSCORE@[118; 119) + WHITESPACE@[119; 120) + FAT_ARROW@[120; 122) + WHITESPACE@[122; 123) + TUPLE_EXPR@[123; 125) + L_PAREN@[123; 124) + R_PAREN@[124; 125) + COMMA@[125; 126) + WHITESPACE@[126; 135) + ATTR@[135; 159) + POUND@[135; 136) + TOKEN_TREE@[136; 159) + L_BRACK@[136; 137) + IDENT@[137; 140) "cfg" + TOKEN_TREE@[140; 158) + L_PAREN@[140; 141) + IDENT@[141; 148) "feature" + WHITESPACE@[148; 149) + EQ@[149; 150) + WHITESPACE@[150; 151) + STRING@[151; 157) + R_PAREN@[157; 158) + R_BRACK@[158; 159) + WHITESPACE@[159; 168) + ATTR@[168; 198) + POUND@[168; 169) + TOKEN_TREE@[169; 198) + L_BRACK@[169; 170) + IDENT@[170; 173) "cfg" + TOKEN_TREE@[173; 197) + L_PAREN@[173; 174) + IDENT@[174; 181) "feature" + WHITESPACE@[181; 182) + EQ@[182; 183) + WHITESPACE@[183; 184) + STRING@[184; 196) + R_PAREN@[196; 197) + R_BRACK@[197; 198) + WHITESPACE@[198; 207) + ATTR@[207; 233) + POUND@[207; 208) + TOKEN_TREE@[208; 233) + L_BRACK@[208; 209) + IDENT@[209; 212) "cfg" + TOKEN_TREE@[212; 232) + L_PAREN@[212; 213) + IDENT@[213; 220) "feature" + WHITESPACE@[220; 221) + EQ@[221; 222) + WHITESPACE@[222; 223) + STRING@[223; 231) + R_PAREN@[231; 232) + R_BRACK@[232; 233) + WHITESPACE@[233; 242) + MATCH_ARM@[242; 249) + PLACEHOLDER_PAT@[242; 243) + UNDERSCORE@[242; 243) + WHITESPACE@[243; 244) + FAT_ARROW@[244; 246) + WHITESPACE@[246; 247) + TUPLE_EXPR@[247; 249) + L_PAREN@[247; 248) + R_PAREN@[248; 249) + COMMA@[249; 250) + WHITESPACE@[250; 255) + R_CURLY@[255; 256) + WHITESPACE@[256; 257) + R_CURLY@[257; 258) + WHITESPACE@[258; 259) -- cgit v1.2.3