Skip to content

Commit 3f7a086

Browse files
committed
Parse outer atttributes for RecordPatField
1 parent 70fe7a4 commit 3f7a086

File tree

3 files changed

+57
-8
lines changed

3 files changed

+57
-8
lines changed

crates/parser/src/grammar/patterns.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -206,13 +206,15 @@ fn record_pat_field_list(p: &mut Parser) {
206206
T![.] if p.at(T![..]) => p.bump(T![..]),
207207
T!['{'] => error_block(p, "expected ident"),
208208

209-
c => {
209+
_ => {
210210
let m = p.start();
211-
match c {
211+
attributes::outer_attrs(p);
212+
match p.current() {
212213
// test record_pat_field
213214
// fn foo() {
214215
// let S { 0: 1 } = ();
215216
// let S { x: 1 } = ();
217+
// let S { #[cfg(any())] x: 1 } = ();
216218
// }
217219
IDENT | INT_NUMBER if p.nth(1) == T![:] => {
218220
name_ref_or_index(p);

crates/syntax/test_data/parser/inline/ok/0145_record_pat_field.rast

Lines changed: 52 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
SOURCE_FILE@0..63
2-
FN@0..62
1+
SOURCE_FILE@0..102
2+
FN@0..101
33
FN_KW@0..2 "fn"
44
WHITESPACE@2..3 " "
55
NAME@3..6
@@ -8,7 +8,7 @@ SOURCE_FILE@0..63
88
L_PAREN@6..7 "("
99
R_PAREN@7..8 ")"
1010
WHITESPACE@8..9 " "
11-
BLOCK_EXPR@9..62
11+
BLOCK_EXPR@9..101
1212
L_CURLY@9..10 "{"
1313
WHITESPACE@10..15 "\n "
1414
LET_STMT@15..35
@@ -70,6 +70,52 @@ SOURCE_FILE@0..63
7070
L_PAREN@57..58 "("
7171
R_PAREN@58..59 ")"
7272
SEMICOLON@59..60 ";"
73-
WHITESPACE@60..61 "\n"
74-
R_CURLY@61..62 "}"
75-
WHITESPACE@62..63 "\n"
73+
WHITESPACE@60..65 "\n "
74+
LET_STMT@65..99
75+
LET_KW@65..68 "let"
76+
WHITESPACE@68..69 " "
77+
RECORD_PAT@69..93
78+
PATH@69..70
79+
PATH_SEGMENT@69..70
80+
NAME_REF@69..70
81+
IDENT@69..70 "S"
82+
WHITESPACE@70..71 " "
83+
RECORD_PAT_FIELD_LIST@71..93
84+
L_CURLY@71..72 "{"
85+
WHITESPACE@72..73 " "
86+
RECORD_PAT_FIELD@73..91
87+
ATTR@73..86
88+
POUND@73..74 "#"
89+
L_BRACK@74..75 "["
90+
PATH@75..78
91+
PATH_SEGMENT@75..78
92+
NAME_REF@75..78
93+
IDENT@75..78 "cfg"
94+
TOKEN_TREE@78..85
95+
L_PAREN@78..79 "("
96+
IDENT@79..82 "any"
97+
TOKEN_TREE@82..84
98+
L_PAREN@82..83 "("
99+
R_PAREN@83..84 ")"
100+
R_PAREN@84..85 ")"
101+
R_BRACK@85..86 "]"
102+
WHITESPACE@86..87 " "
103+
NAME_REF@87..88
104+
IDENT@87..88 "x"
105+
COLON@88..89 ":"
106+
WHITESPACE@89..90 " "
107+
LITERAL_PAT@90..91
108+
LITERAL@90..91
109+
INT_NUMBER@90..91 "1"
110+
WHITESPACE@91..92 " "
111+
R_CURLY@92..93 "}"
112+
WHITESPACE@93..94 " "
113+
EQ@94..95 "="
114+
WHITESPACE@95..96 " "
115+
TUPLE_EXPR@96..98
116+
L_PAREN@96..97 "("
117+
R_PAREN@97..98 ")"
118+
SEMICOLON@98..99 ";"
119+
WHITESPACE@99..100 "\n"
120+
R_CURLY@100..101 "}"
121+
WHITESPACE@101..102 "\n"
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
fn foo() {
22
let S { 0: 1 } = ();
33
let S { x: 1 } = ();
4+
let S { #[cfg(any())] x: 1 } = ();
45
}

0 commit comments

Comments
 (0)