@@ -21,7 +21,21 @@ module.exports = grammar(HTML, {
21
21
original . concat ( [
22
22
$ . _interpolation_start ,
23
23
$ . _interpolation_end ,
24
- $ . _control_flow_start ,
24
+ // $._control_flow_start,
25
+ $ . if_start ,
26
+ $ . else_start ,
27
+ $ . for_start ,
28
+ $ . switch_start ,
29
+ $ . case_start ,
30
+ $ . default_start ,
31
+ $ . defer_start ,
32
+ $ . let_start ,
33
+ $ . empty_start ,
34
+ $ . placeholder_start ,
35
+ $ . loading_start ,
36
+ $ . error_start ,
37
+ $ . else_if_start ,
38
+ $ . at_sign ,
25
39
] ) ,
26
40
27
41
rules : {
@@ -31,12 +45,13 @@ module.exports = grammar(HTML, {
31
45
prec ( 1 , $ . icu_expression ) ,
32
46
prec ( 1 , $ . interpolation ) ,
33
47
prec ( 1 , $ . _any_statement ) ,
48
+ $ . at_sign ,
34
49
original ,
35
50
) ,
36
51
37
52
// ---------- Overrides ----------
38
53
attribute_name : ( _ ) => / [ ^ < > \* . \[ \] \( \) " ' = \s ] + / ,
39
- text : ( _ ) => / [ ^ < > { } & \s ] ( [ ^ < > { } & ] * [ ^ < > { } & \s ] ) ? / ,
54
+ text : ( _ ) => / [ ^ < > { } & @ \s ] ( [ ^ < > { } & @ ] * [ ^ < > { } & @ \s ] ) ? / ,
40
55
41
56
// ----------- Statement block --------
42
57
statement_block : ( $ ) => prec . right ( seq ( '{' , repeat ( $ . _node ) , '}' ) ) ,
@@ -63,24 +78,15 @@ module.exports = grammar(HTML, {
63
78
) ,
64
79
65
80
// ---------- Let Statement ----------
66
-
67
81
let_statement : ( $ ) =>
68
- prec . left (
69
- seq (
70
- alias ( $ . _control_flow_start , '@' ) ,
71
- alias ( 'let' , $ . control_keyword ) ,
72
- $ . assignment_expression ,
73
- ';' ,
74
- ) ,
75
- ) ,
82
+ prec . left ( seq ( alias ( $ . let_start , $ . control_keyword ) , $ . assignment_expression , ';' ) ) ,
76
83
77
84
// ---------- Switch Statement ----------
78
85
79
86
switch_statement : ( $ ) =>
80
87
prec . right (
81
88
seq (
82
- alias ( $ . _control_flow_start , '@' ) ,
83
- alias ( 'switch' , $ . control_keyword ) ,
89
+ alias ( $ . switch_start , $ . control_keyword ) ,
84
90
'(' ,
85
91
field ( 'value' , $ . expression ) ,
86
92
')' ,
@@ -93,28 +99,22 @@ module.exports = grammar(HTML, {
93
99
94
100
case_statement : ( $ ) =>
95
101
seq (
96
- alias ( $ . _control_flow_start , '@' ) ,
97
- alias ( 'case' , $ . control_keyword ) ,
102
+ alias ( $ . case_start , $ . control_keyword ) ,
98
103
'(' ,
99
104
field ( 'value' , $ . _primitive ) ,
100
105
')' ,
101
106
field ( 'body' , $ . statement_block ) ,
102
107
) ,
103
108
104
109
default_statement : ( $ ) =>
105
- seq (
106
- alias ( $ . _control_flow_start , '@' ) ,
107
- alias ( 'default' , $ . control_keyword ) ,
108
- field ( 'body' , $ . statement_block ) ,
109
- ) ,
110
+ seq ( alias ( $ . default_start , $ . control_keyword ) , field ( 'body' , $ . statement_block ) ) ,
110
111
111
112
// ---------- Defer Statement ----------
112
113
113
114
defer_statement : ( $ ) =>
114
115
prec . left (
115
116
seq (
116
- alias ( $ . _control_flow_start , '@' ) ,
117
- alias ( 'defer' , $ . control_keyword ) ,
117
+ alias ( $ . defer_start , $ . control_keyword ) ,
118
118
optional ( $ . defer_trigger ) ,
119
119
field ( 'body' , $ . statement_block ) ,
120
120
) ,
@@ -123,8 +123,7 @@ module.exports = grammar(HTML, {
123
123
placeholder_statement : ( $ ) =>
124
124
prec . left (
125
125
seq (
126
- alias ( $ . _control_flow_start , '@' ) ,
127
- alias ( 'placeholder' , $ . control_keyword ) ,
126
+ alias ( $ . placeholder_start , $ . control_keyword ) ,
128
127
optional ( $ . placeholder_minimum ) ,
129
128
field ( 'body' , $ . statement_block ) ,
130
129
) ,
@@ -133,19 +132,14 @@ module.exports = grammar(HTML, {
133
132
loading_statement : ( $ ) =>
134
133
prec . left (
135
134
seq (
136
- alias ( $ . _control_flow_start , '@' ) ,
137
- alias ( 'loading' , $ . control_keyword ) ,
135
+ alias ( $ . loading_start , $ . control_keyword ) ,
138
136
optional ( $ . loading_condition ) ,
139
137
field ( 'body' , $ . statement_block ) ,
140
138
) ,
141
139
) ,
142
140
143
141
error_statement : ( $ ) =>
144
- seq (
145
- alias ( $ . _control_flow_start , '@' ) ,
146
- alias ( 'error' , $ . control_keyword ) ,
147
- field ( 'body' , $ . statement_block ) ,
148
- ) ,
142
+ seq ( alias ( $ . error_start , $ . control_keyword ) , field ( 'body' , $ . statement_block ) ) ,
149
143
150
144
defer_trigger : ( $ ) =>
151
145
seq (
@@ -185,8 +179,7 @@ module.exports = grammar(HTML, {
185
179
for_statement : ( $ ) =>
186
180
prec . left (
187
181
seq (
188
- alias ( $ . _control_flow_start , '@' ) ,
189
- alias ( 'for' , $ . control_keyword ) ,
182
+ alias ( $ . for_start , $ . control_keyword ) ,
190
183
'(' ,
191
184
field ( 'declaration' , $ . for_declaration ) ,
192
185
optional ( seq ( ';' , field ( 'reference' , $ . for_reference ) ) ) ,
@@ -196,11 +189,7 @@ module.exports = grammar(HTML, {
196
189
) ,
197
190
198
191
empty_statement : ( $ ) =>
199
- seq (
200
- alias ( $ . _control_flow_start , '@' ) ,
201
- alias ( 'empty' , $ . control_keyword ) ,
202
- field ( 'body' , $ . statement_block ) ,
203
- ) ,
192
+ seq ( alias ( $ . empty_start , $ . control_keyword ) , field ( 'body' , $ . statement_block ) ) ,
204
193
205
194
for_declaration : ( $ ) =>
206
195
seq (
@@ -220,33 +209,23 @@ module.exports = grammar(HTML, {
220
209
) ,
221
210
222
211
// ---------- If Statement ----------
223
- if_statement : ( $ ) => prec . right ( seq ( $ . _if_start_expression , $ . _if_body_expression ) ) ,
224
-
225
- else_if_statement : ( $ ) =>
226
- prec . right ( seq ( $ . _else_if_start_expression , $ . _if_body_expression ) ) ,
227
-
228
- else_statement : ( $ ) =>
212
+ if_statement : ( $ ) =>
229
213
prec . right (
230
214
seq (
231
- alias ( $ . _control_flow_start , '@' ) ,
232
- alias ( 'else' , $ . control_keyword ) ,
233
- $ . statement_block ,
215
+ alias ( $ . if_start , $ . control_keyword ) ,
216
+ '(' ,
217
+ field ( 'condition' , $ . if_condition ) ,
218
+ optional ( field ( 'reference' , $ . if_reference ) ) ,
219
+ ')' ,
220
+ field ( 'consequence' , $ . statement_block ) ,
221
+ optional ( repeat ( $ . _alternative_statement ) ) ,
234
222
) ,
235
223
) ,
236
224
237
- _if_start_expression : ( $ ) =>
238
- seq ( alias ( $ . _control_flow_start , '@' ) , alias ( 'if' , $ . control_keyword ) ) ,
239
-
240
- _else_if_start_expression : ( $ ) =>
241
- seq (
242
- alias ( $ . _control_flow_start , '@' ) ,
243
- alias ( 'else' , $ . control_keyword ) ,
244
- alias ( 'if' , $ . control_keyword ) ,
245
- ) ,
246
-
247
- _if_body_expression : ( $ ) =>
248
- prec . left (
225
+ else_if_statement : ( $ ) =>
226
+ prec . right (
249
227
seq (
228
+ alias ( $ . else_if_start , $ . control_keyword ) ,
250
229
'(' ,
251
230
field ( 'condition' , $ . if_condition ) ,
252
231
optional ( field ( 'reference' , $ . if_reference ) ) ,
@@ -255,6 +234,11 @@ module.exports = grammar(HTML, {
255
234
) ,
256
235
) ,
257
236
237
+ else_statement : ( $ ) =>
238
+ prec . right (
239
+ seq ( alias ( $ . else_start , $ . control_keyword ) , field ( 'body' , $ . statement_block ) ) ,
240
+ ) ,
241
+
258
242
if_condition : ( $ ) => prec . right ( PREC . CALL , $ . _any_expression ) ,
259
243
if_reference : ( $ ) => seq ( ';' , alias ( 'as' , $ . special_keyword ) , $ . identifier ) ,
260
244
@@ -573,7 +557,15 @@ module.exports = grammar(HTML, {
573
557
seq (
574
558
field ( 'object' , $ . _primitive ) ,
575
559
'[' ,
576
- field ( 'property' , choice ( $ . identifier , $ . static_member_expression , $ . bracket_expression , $ . member_expression ) ) ,
560
+ field (
561
+ 'property' ,
562
+ choice (
563
+ $ . identifier ,
564
+ $ . static_member_expression ,
565
+ $ . bracket_expression ,
566
+ $ . member_expression ,
567
+ ) ,
568
+ ) ,
577
569
']' ,
578
570
) ,
579
571
) ,
0 commit comments