diff --git a/crates/ra_parser/src/grammar/expressions/atom.rs b/crates/ra_parser/src/grammar/expressions/atom.rs index 41be283d00a..6bda0414164 100644 --- a/crates/ra_parser/src/grammar/expressions/atom.rs +++ b/crates/ra_parser/src/grammar/expressions/atom.rs @@ -170,6 +170,15 @@ fn array_expr(p: &mut Parser) -> CompletedMarker { if p.eat(T![']']) { return m.complete(p, ARRAY_EXPR); } + + // test first_array_member_attributes + // pub const A: &[i64] = &[ + // #[cfg(test)] + // 1, + // 2, + // ]; + attributes::outer_attributes(p); + expr(p); if p.eat(T![;]) { expr(p); @@ -181,6 +190,14 @@ fn array_expr(p: &mut Parser) -> CompletedMarker { if p.at(T![']']) { break; } + + // test subsequent_array_member_attributes + // pub const A: &[i64] = &[ + // 1, + // #[cfg(test)] + // 2, + // ]; + attributes::outer_attributes(p); if !p.at_ts(EXPR_FIRST) { p.error("expected expression"); break; diff --git a/crates/ra_syntax/tests/data/parser/inline/ok/0135_first_array_member_attributes.rs b/crates/ra_syntax/tests/data/parser/inline/ok/0135_first_array_member_attributes.rs new file mode 100644 index 00000000000..f59e1377118 --- /dev/null +++ b/crates/ra_syntax/tests/data/parser/inline/ok/0135_first_array_member_attributes.rs @@ -0,0 +1,5 @@ +pub const A: &[i64] = &[ + #[cfg(test)] + 1, + 2, +]; diff --git a/crates/ra_syntax/tests/data/parser/inline/ok/0135_first_array_member_attributes.txt b/crates/ra_syntax/tests/data/parser/inline/ok/0135_first_array_member_attributes.txt new file mode 100644 index 00000000000..eac4f6f3085 --- /dev/null +++ b/crates/ra_syntax/tests/data/parser/inline/ok/0135_first_array_member_attributes.txt @@ -0,0 +1,51 @@ +SOURCE_FILE@[0; 56) + CONST_DEF@[0; 55) + VISIBILITY@[0; 3) + PUB_KW@[0; 3) "pub" + WHITESPACE@[3; 4) " " + CONST_KW@[4; 9) "const" + WHITESPACE@[9; 10) " " + NAME@[10; 11) + IDENT@[10; 11) "A" + COLON@[11; 12) ":" + WHITESPACE@[12; 13) " " + REFERENCE_TYPE@[13; 19) + AMP@[13; 14) "&" + SLICE_TYPE@[14; 19) + L_BRACK@[14; 15) "[" + PATH_TYPE@[15; 18) + PATH@[15; 18) + PATH_SEGMENT@[15; 18) + NAME_REF@[15; 18) + IDENT@[15; 18) "i64" + R_BRACK@[18; 19) "]" + WHITESPACE@[19; 20) " " + EQ@[20; 21) "=" + WHITESPACE@[21; 22) " " + REF_EXPR@[22; 54) + AMP@[22; 23) "&" + ARRAY_EXPR@[23; 54) + L_BRACK@[23; 24) "[" + WHITESPACE@[24; 28) "\n " + ATTR@[28; 40) + POUND@[28; 29) "#" + TOKEN_TREE@[29; 40) + L_BRACK@[29; 30) "[" + IDENT@[30; 33) "cfg" + TOKEN_TREE@[33; 39) + L_PAREN@[33; 34) "(" + IDENT@[34; 38) "test" + R_PAREN@[38; 39) ")" + R_BRACK@[39; 40) "]" + WHITESPACE@[40; 44) "\n " + LITERAL@[44; 45) + INT_NUMBER@[44; 45) "1" + COMMA@[45; 46) "," + WHITESPACE@[46; 50) "\n " + LITERAL@[50; 51) + INT_NUMBER@[50; 51) "2" + COMMA@[51; 52) "," + WHITESPACE@[52; 53) "\n" + R_BRACK@[53; 54) "]" + SEMI@[54; 55) ";" + WHITESPACE@[55; 56) "\n" diff --git a/crates/ra_syntax/tests/data/parser/inline/ok/0136_subsequent_array_member_attributes.rs b/crates/ra_syntax/tests/data/parser/inline/ok/0136_subsequent_array_member_attributes.rs new file mode 100644 index 00000000000..1324acb3f69 --- /dev/null +++ b/crates/ra_syntax/tests/data/parser/inline/ok/0136_subsequent_array_member_attributes.rs @@ -0,0 +1,5 @@ +pub const A: &[i64] = &[ + 1, + #[cfg(test)] + 2, +]; diff --git a/crates/ra_syntax/tests/data/parser/inline/ok/0136_subsequent_array_member_attributes.txt b/crates/ra_syntax/tests/data/parser/inline/ok/0136_subsequent_array_member_attributes.txt new file mode 100644 index 00000000000..6fa1b42d917 --- /dev/null +++ b/crates/ra_syntax/tests/data/parser/inline/ok/0136_subsequent_array_member_attributes.txt @@ -0,0 +1,51 @@ +SOURCE_FILE@[0; 56) + CONST_DEF@[0; 55) + VISIBILITY@[0; 3) + PUB_KW@[0; 3) "pub" + WHITESPACE@[3; 4) " " + CONST_KW@[4; 9) "const" + WHITESPACE@[9; 10) " " + NAME@[10; 11) + IDENT@[10; 11) "A" + COLON@[11; 12) ":" + WHITESPACE@[12; 13) " " + REFERENCE_TYPE@[13; 19) + AMP@[13; 14) "&" + SLICE_TYPE@[14; 19) + L_BRACK@[14; 15) "[" + PATH_TYPE@[15; 18) + PATH@[15; 18) + PATH_SEGMENT@[15; 18) + NAME_REF@[15; 18) + IDENT@[15; 18) "i64" + R_BRACK@[18; 19) "]" + WHITESPACE@[19; 20) " " + EQ@[20; 21) "=" + WHITESPACE@[21; 22) " " + REF_EXPR@[22; 54) + AMP@[22; 23) "&" + ARRAY_EXPR@[23; 54) + L_BRACK@[23; 24) "[" + WHITESPACE@[24; 28) "\n " + LITERAL@[28; 29) + INT_NUMBER@[28; 29) "1" + COMMA@[29; 30) "," + WHITESPACE@[30; 34) "\n " + ATTR@[34; 46) + POUND@[34; 35) "#" + TOKEN_TREE@[35; 46) + L_BRACK@[35; 36) "[" + IDENT@[36; 39) "cfg" + TOKEN_TREE@[39; 45) + L_PAREN@[39; 40) "(" + IDENT@[40; 44) "test" + R_PAREN@[44; 45) ")" + R_BRACK@[45; 46) "]" + WHITESPACE@[46; 50) "\n " + LITERAL@[50; 51) + INT_NUMBER@[50; 51) "2" + COMMA@[51; 52) "," + WHITESPACE@[52; 53) "\n" + R_BRACK@[53; 54) "]" + SEMI@[54; 55) ";" + WHITESPACE@[55; 56) "\n"