diff options
3 files changed, 56 insertions, 3 deletions
diff --git a/crates/parser/src/grammar/expressions/atom.rs b/crates/parser/src/grammar/expressions/atom.rs index 18b63feb7..e897d5a52 100644 --- a/crates/parser/src/grammar/expressions/atom.rs +++ b/crates/parser/src/grammar/expressions/atom.rs | |||
@@ -156,11 +156,13 @@ fn tuple_expr(p: &mut Parser) -> CompletedMarker { | |||
156 | let mut saw_expr = false; | 156 | let mut saw_expr = false; |
157 | while !p.at(EOF) && !p.at(T![')']) { | 157 | while !p.at(EOF) && !p.at(T![')']) { |
158 | saw_expr = true; | 158 | saw_expr = true; |
159 | if !p.at_ts(EXPR_FIRST) { | 159 | |
160 | p.error("expected expression"); | 160 | // test tuple_attrs |
161 | // const A: (i64, i64) = (1, #[cfg(test)] 2); | ||
162 | if !expr_with_attrs(p) { | ||
161 | break; | 163 | break; |
162 | } | 164 | } |
163 | expr(p); | 165 | |
164 | if !p.at(T![')']) { | 166 | if !p.at(T![')']) { |
165 | saw_comma = true; | 167 | saw_comma = true; |
166 | p.expect(T![,]); | 168 | p.expect(T![,]); |
diff --git a/crates/syntax/test_data/parser/inline/ok/0154_tuple_attrs.rast b/crates/syntax/test_data/parser/inline/ok/0154_tuple_attrs.rast new file mode 100644 index 000000000..d34b21abe --- /dev/null +++ b/crates/syntax/test_data/parser/inline/ok/0154_tuple_attrs.rast | |||
@@ -0,0 +1,50 @@ | |||
1 | SOURCE_FILE@0..43 | ||
2 | CONST@0..42 | ||
3 | CONST_KW@0..5 "const" | ||
4 | WHITESPACE@5..6 " " | ||
5 | NAME@6..7 | ||
6 | IDENT@6..7 "A" | ||
7 | COLON@7..8 ":" | ||
8 | WHITESPACE@8..9 " " | ||
9 | TUPLE_TYPE@9..19 | ||
10 | L_PAREN@9..10 "(" | ||
11 | PATH_TYPE@10..13 | ||
12 | PATH@10..13 | ||
13 | PATH_SEGMENT@10..13 | ||
14 | NAME_REF@10..13 | ||
15 | IDENT@10..13 "i64" | ||
16 | COMMA@13..14 "," | ||
17 | WHITESPACE@14..15 " " | ||
18 | PATH_TYPE@15..18 | ||
19 | PATH@15..18 | ||
20 | PATH_SEGMENT@15..18 | ||
21 | NAME_REF@15..18 | ||
22 | IDENT@15..18 "i64" | ||
23 | R_PAREN@18..19 ")" | ||
24 | WHITESPACE@19..20 " " | ||
25 | EQ@20..21 "=" | ||
26 | WHITESPACE@21..22 " " | ||
27 | TUPLE_EXPR@22..41 | ||
28 | L_PAREN@22..23 "(" | ||
29 | LITERAL@23..24 | ||
30 | INT_NUMBER@23..24 "1" | ||
31 | COMMA@24..25 "," | ||
32 | WHITESPACE@25..26 " " | ||
33 | LITERAL@26..40 | ||
34 | ATTR@26..38 | ||
35 | POUND@26..27 "#" | ||
36 | L_BRACK@27..28 "[" | ||
37 | PATH@28..31 | ||
38 | PATH_SEGMENT@28..31 | ||
39 | NAME_REF@28..31 | ||
40 | IDENT@28..31 "cfg" | ||
41 | TOKEN_TREE@31..37 | ||
42 | L_PAREN@31..32 "(" | ||
43 | IDENT@32..36 "test" | ||
44 | R_PAREN@36..37 ")" | ||
45 | R_BRACK@37..38 "]" | ||
46 | WHITESPACE@38..39 " " | ||
47 | INT_NUMBER@39..40 "2" | ||
48 | R_PAREN@40..41 ")" | ||
49 | SEMICOLON@41..42 ";" | ||
50 | WHITESPACE@42..43 "\n" | ||
diff --git a/crates/syntax/test_data/parser/inline/ok/0154_tuple_attrs.rs b/crates/syntax/test_data/parser/inline/ok/0154_tuple_attrs.rs new file mode 100644 index 000000000..f84b7ab31 --- /dev/null +++ b/crates/syntax/test_data/parser/inline/ok/0154_tuple_attrs.rs | |||
@@ -0,0 +1 @@ | |||
const A: (i64, i64) = (1, #[cfg(test)] 2); | |||