@@ -12,6 +12,9 @@ const HTML = require('tree-sitter-html/grammar');
12
12
const PREC = {
13
13
CALL : 1 ,
14
14
ALIAS : 2 ,
15
+ PIPE : 3 ,
16
+ NULLISH : 4 ,
17
+ INTERPOLATION : 5 ,
15
18
} ;
16
19
17
20
module . exports = grammar ( HTML , {
@@ -276,10 +279,13 @@ module.exports = grammar(HTML, {
276
279
277
280
// ---------- Interpolation ---------
278
281
interpolation : ( $ ) =>
279
- seq (
280
- alias ( $ . _interpolation_start , '{{' ) ,
281
- choice ( $ . _any_expression , $ . concatenation_expression ) ,
282
- alias ( $ . _interpolation_end , '}}' ) ,
282
+ prec . right (
283
+ PREC . INTERPOLATION ,
284
+ seq (
285
+ alias ( $ . _interpolation_start , '{{' ) ,
286
+ choice ( $ . _any_expression , $ . concatenation_expression ) ,
287
+ alias ( $ . _interpolation_end , '}}' ) ,
288
+ ) ,
283
289
) ,
284
290
285
291
concatenation_expression : ( $ ) =>
@@ -383,7 +389,7 @@ module.exports = grammar(HTML, {
383
389
384
390
// ---------- Expressions ---------
385
391
// Expression
386
- expression : ( $ ) => seq ( $ . _primitive , optional ( field ( 'pipes' , $ . pipe_sequence ) ) ) ,
392
+ expression : ( $ ) => prec . left ( seq ( $ . _primitive , optional ( field ( 'pipes' , $ . pipe_sequence ) ) ) ) ,
387
393
388
394
// Unary expression
389
395
unary_expression : ( $ ) =>
@@ -415,10 +421,13 @@ module.exports = grammar(HTML, {
415
421
416
422
// Nullish coalescing expression
417
423
nullish_coalescing_expression : ( $ ) =>
418
- seq (
419
- field ( 'condition' , $ . _any_expression ) ,
420
- alias ( '??' , $ . coalescing_operator ) ,
421
- field ( 'default' , $ . _primitive ) ,
424
+ prec . right (
425
+ PREC . NULLISH ,
426
+ seq (
427
+ field ( 'condition' , $ . _any_expression ) ,
428
+ alias ( '??' , $ . coalescing_operator ) ,
429
+ field ( 'default' , $ . _primitive ) ,
430
+ ) ,
422
431
) ,
423
432
424
433
// Conditional expression
@@ -441,13 +450,16 @@ module.exports = grammar(HTML, {
441
450
) ,
442
451
443
452
// ---------- Pipes ---------
444
- pipe_sequence : ( $ ) => repeat1 ( seq ( alias ( '|' , $ . pipe_operator ) , $ . pipe_call ) ) ,
453
+ pipe_sequence : ( $ ) => prec . left ( PREC . PIPE , repeat1 ( seq ( alias ( '|' , $ . pipe_operator ) , $ . pipe_call ) ) ) ,
445
454
446
455
pipe_call : ( $ ) =>
447
- seq ( field ( 'name' , $ . identifier ) , optional ( field ( 'arguments' , $ . pipe_arguments ) ) ) ,
456
+ prec . left (
457
+ PREC . PIPE ,
458
+ seq ( field ( 'name' , $ . identifier ) , optional ( field ( 'arguments' , $ . pipe_arguments ) ) ) ,
459
+ ) ,
448
460
449
- pipe_arguments : ( $ ) => repeat1 ( $ . _pipe_argument ) ,
450
- _pipe_argument : ( $ ) => seq ( ':' , $ . _primitive ) ,
461
+ pipe_arguments : ( $ ) => prec . left ( PREC . PIPE , repeat1 ( $ . _pipe_argument ) ) ,
462
+ _pipe_argument : ( $ ) => prec . left ( PREC . PIPE , seq ( ':' , choice ( $ . _any_expression , $ . group ) ) ) ,
451
463
452
464
// ---------- Primitives ----------
453
465
_primitive : ( $ ) =>
0 commit comments