@@ -21,7 +21,21 @@ module.exports = grammar(HTML, {
2121 original . concat ( [
2222 $ . _interpolation_start ,
2323 $ . _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 ,
2539 ] ) ,
2640
2741 rules : {
@@ -31,12 +45,13 @@ module.exports = grammar(HTML, {
3145 prec ( 1 , $ . icu_expression ) ,
3246 prec ( 1 , $ . interpolation ) ,
3347 prec ( 1 , $ . _any_statement ) ,
48+ $ . at_sign ,
3449 original ,
3550 ) ,
3651
3752 // ---------- Overrides ----------
3853 attribute_name : ( _ ) => / [ ^ < > \* . \[ \] \( \) " ' = \s ] + / ,
39- text : ( _ ) => / [ ^ < > { } & \s ] ( [ ^ < > { } & ] * [ ^ < > { } & \s ] ) ? / ,
54+ text : ( _ ) => / [ ^ < > { } & @ \s ] ( [ ^ < > { } & @ ] * [ ^ < > { } & @ \s ] ) ? / ,
4055
4156 // ----------- Statement block --------
4257 statement_block : ( $ ) => prec . right ( seq ( '{' , repeat ( $ . _node ) , '}' ) ) ,
@@ -63,24 +78,15 @@ module.exports = grammar(HTML, {
6378 ) ,
6479
6580 // ---------- Let Statement ----------
66-
6781 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 , ';' ) ) ,
7683
7784 // ---------- Switch Statement ----------
7885
7986 switch_statement : ( $ ) =>
8087 prec . right (
8188 seq (
82- alias ( $ . _control_flow_start , '@' ) ,
83- alias ( 'switch' , $ . control_keyword ) ,
89+ alias ( $ . switch_start , $ . control_keyword ) ,
8490 '(' ,
8591 field ( 'value' , $ . expression ) ,
8692 ')' ,
@@ -93,28 +99,22 @@ module.exports = grammar(HTML, {
9399
94100 case_statement : ( $ ) =>
95101 seq (
96- alias ( $ . _control_flow_start , '@' ) ,
97- alias ( 'case' , $ . control_keyword ) ,
102+ alias ( $ . case_start , $ . control_keyword ) ,
98103 '(' ,
99104 field ( 'value' , $ . _primitive ) ,
100105 ')' ,
101106 field ( 'body' , $ . statement_block ) ,
102107 ) ,
103108
104109 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 ) ) ,
110111
111112 // ---------- Defer Statement ----------
112113
113114 defer_statement : ( $ ) =>
114115 prec . left (
115116 seq (
116- alias ( $ . _control_flow_start , '@' ) ,
117- alias ( 'defer' , $ . control_keyword ) ,
117+ alias ( $ . defer_start , $ . control_keyword ) ,
118118 optional ( $ . defer_trigger ) ,
119119 field ( 'body' , $ . statement_block ) ,
120120 ) ,
@@ -123,8 +123,7 @@ module.exports = grammar(HTML, {
123123 placeholder_statement : ( $ ) =>
124124 prec . left (
125125 seq (
126- alias ( $ . _control_flow_start , '@' ) ,
127- alias ( 'placeholder' , $ . control_keyword ) ,
126+ alias ( $ . placeholder_start , $ . control_keyword ) ,
128127 optional ( $ . placeholder_minimum ) ,
129128 field ( 'body' , $ . statement_block ) ,
130129 ) ,
@@ -133,19 +132,14 @@ module.exports = grammar(HTML, {
133132 loading_statement : ( $ ) =>
134133 prec . left (
135134 seq (
136- alias ( $ . _control_flow_start , '@' ) ,
137- alias ( 'loading' , $ . control_keyword ) ,
135+ alias ( $ . loading_start , $ . control_keyword ) ,
138136 optional ( $ . loading_condition ) ,
139137 field ( 'body' , $ . statement_block ) ,
140138 ) ,
141139 ) ,
142140
143141 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 ) ) ,
149143
150144 defer_trigger : ( $ ) =>
151145 seq (
@@ -185,8 +179,7 @@ module.exports = grammar(HTML, {
185179 for_statement : ( $ ) =>
186180 prec . left (
187181 seq (
188- alias ( $ . _control_flow_start , '@' ) ,
189- alias ( 'for' , $ . control_keyword ) ,
182+ alias ( $ . for_start , $ . control_keyword ) ,
190183 '(' ,
191184 field ( 'declaration' , $ . for_declaration ) ,
192185 optional ( seq ( ';' , field ( 'reference' , $ . for_reference ) ) ) ,
@@ -196,11 +189,7 @@ module.exports = grammar(HTML, {
196189 ) ,
197190
198191 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 ) ) ,
204193
205194 for_declaration : ( $ ) =>
206195 seq (
@@ -220,33 +209,23 @@ module.exports = grammar(HTML, {
220209 ) ,
221210
222211 // ---------- 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 : ( $ ) =>
229213 prec . right (
230214 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 ) ) ,
234222 ) ,
235223 ) ,
236224
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 (
249227 seq (
228+ alias ( $ . else_if_start , $ . control_keyword ) ,
250229 '(' ,
251230 field ( 'condition' , $ . if_condition ) ,
252231 optional ( field ( 'reference' , $ . if_reference ) ) ,
@@ -255,6 +234,11 @@ module.exports = grammar(HTML, {
255234 ) ,
256235 ) ,
257236
237+ else_statement : ( $ ) =>
238+ prec . right (
239+ seq ( alias ( $ . else_start , $ . control_keyword ) , field ( 'body' , $ . statement_block ) ) ,
240+ ) ,
241+
258242 if_condition : ( $ ) => prec . right ( PREC . CALL , $ . _any_expression ) ,
259243 if_reference : ( $ ) => seq ( ';' , alias ( 'as' , $ . special_keyword ) , $ . identifier ) ,
260244
@@ -573,7 +557,15 @@ module.exports = grammar(HTML, {
573557 seq (
574558 field ( 'object' , $ . _primitive ) ,
575559 '[' ,
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+ ) ,
577569 ']' ,
578570 ) ,
579571 ) ,
0 commit comments