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. --- crates/ra_syntax/src/grammar/expressions/atom.rs | 33 ++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'crates/ra_syntax/src/grammar/expressions/atom.rs') diff --git a/crates/ra_syntax/src/grammar/expressions/atom.rs b/crates/ra_syntax/src/grammar/expressions/atom.rs index 27ba87657..67cd7e6b0 100644 --- a/crates/ra_syntax/src/grammar/expressions/atom.rs +++ b/crates/ra_syntax/src/grammar/expressions/atom.rs @@ -313,11 +313,44 @@ pub(crate) fn match_arm_list(p: &mut Parser) { assert!(p.at(L_CURLY)); let m = p.start(); p.eat(L_CURLY); + + // test match_arms_inner_attribute + // fn foo() { + // match () { + // #![doc("Inner attribute")] + // #![doc("Can be")] + // #![doc("Stacked")] + // _ => (), + // } + // } + attributes::inner_attributes(p); + while !p.at(EOF) && !p.at(R_CURLY) { if p.at(L_CURLY) { error_block(p, "expected match arm"); continue; } + + // This may result in invalid attributes + // if there are inner attributes mixed in together + // with the outer attributes, but we allow parsing + // those so we can run validation and report better errors + + // test match_arms_outer_attributes + // fn foo() { + // match () { + // #[cfg(feature = "some")] + // _ => (), + // #[cfg(feature = "other")] + // _ => (), + // #[cfg(feature = "many")] + // #[cfg(feature = "attributes")] + // #[cfg(feature = "before")] + // _ => (), + // } + // } + attributes::all_attributes(p); + // test match_arms_commas // fn foo() { // match () { -- cgit v1.2.3 From 96e3ac389fbc3709cc6e7e8dbe25619daeb61f4b Mon Sep 17 00:00:00 2001 From: Ville Penttinen Date: Sun, 17 Feb 2019 19:48:08 +0200 Subject: Parse only outer_attributes for match arms for now --- crates/ra_syntax/src/grammar/expressions/atom.rs | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) (limited to 'crates/ra_syntax/src/grammar/expressions/atom.rs') diff --git a/crates/ra_syntax/src/grammar/expressions/atom.rs b/crates/ra_syntax/src/grammar/expressions/atom.rs index 67cd7e6b0..e74305b6a 100644 --- a/crates/ra_syntax/src/grammar/expressions/atom.rs +++ b/crates/ra_syntax/src/grammar/expressions/atom.rs @@ -331,11 +331,6 @@ pub(crate) fn match_arm_list(p: &mut Parser) { continue; } - // This may result in invalid attributes - // if there are inner attributes mixed in together - // with the outer attributes, but we allow parsing - // those so we can run validation and report better errors - // test match_arms_outer_attributes // fn foo() { // match () { @@ -349,7 +344,7 @@ pub(crate) fn match_arm_list(p: &mut Parser) { // _ => (), // } // } - attributes::all_attributes(p); + attributes::outer_attributes(p); // test match_arms_commas // fn foo() { -- cgit v1.2.3