@quenk/wml 2.10.0 → 2.10.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/parse/test.js CHANGED
@@ -221,14 +221,17 @@ exports.tests = {
221
221
  '[context] should mark nested properties as optional if all are': "{% context Paper where object.\"type\"?: String %}",
222
222
  'should parse type statements': "{% type Type = String | Number | Boolean | Type[] | Type -> Type %}",
223
223
  'should parse tupe types': "{% type Tuple = [Number, String, Number] %}",
224
- 'should parse primitives used as type': '{% type Prims = 1|2|"three"|true|false|"1,2,three,true,false" %}',
225
- 'should parse this type': '{% type SortDir = 1 | -1 %}',
226
224
  'should parse type assertion': '<Panel onClick={{ \e -> [*User]foo(e) }} />',
227
225
  'should parse partial application in expression': '<Link ww:text={{truncate(50)(@text)}} />',
228
226
  'should transform special primitives': "<div>\n {% for kind in [\n String,\n Boolean,\n Number,\n Object,\n Undefined,\n Null,\n Void,\n Never,\n Any] %}\n {{ kind | text }}\n {% endfor %}\n </div>",
229
227
  'should allow casting': "\n {% view Test (Object) %}\n <Widget\n val1={{String(@value)}}\n val2={{Number(@value)}}\n val3={{Boolean(@value)}} />\n ",
230
228
  'should parse null query operator': "<div>{% if value ?? %}<b>True</b>{% else %}<b>False</b>{% endif %}</div>",
231
229
  '[let] should parse let statements': "{% let head:HeadCtx = {title = \"Foo\"} %}\n {% let head2:HeadCtx = {title = \"My Title\"} %}\n ",
232
- '[let] should be usable in a view': "{% view MyView(Object) %}\n {% let head:HeadViewContext = {title = \"My Title\"} %}\n <h1>{{<HeadView(head)>}}</h1>\n "
230
+ '[let] should be usable in a view': "\n {% view MyView(Object) %}\n {% let head:HeadViewContext = {title = \"My Title\"} %}\n <h1>{{<HeadView(head)>}}</h1>\n ",
231
+ '[comment] should parse html comments': "<!-- This is an html comment. -->",
232
+ '[comment] should parse wml comments': "{# This is a wml comment #}",
233
+ '[comment] should parse wml comments in statements': "{% view Name {# This is a comment! #} (Object) %} <div/> %}",
234
+ '[fun] should parse multi dimensional array parameters': "\n {% fun test (value:List[][]) %}<p/>{% endfun %}",
235
+ 'should allow index access on context properties': "{% view Test (Object) %}\n <div>\n {% if @[\"type\"]?? %}\n <div/>\n {% endif %}\n </div>"
233
236
  };
234
237
  //# sourceMappingURL=test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"test.js","sourceRoot":"","sources":["test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["test.ts"],"names":[],"mappings":";;;AAAa,QAAA,KAAK,GAA2B;IAEzC,+BAA+B,EAAE;QAC7B,KAAK,EAAE,6CAA2C;KACrD;IACD,2BAA2B,EAAE;QACzB,KAAK,EAAE,uCAAqC;KAC/C;IACD,iCAAiC,EAAE;QAC/B,KAAK,EAAE,WAAW;KACrB;IACD,mDAAmD,EAAE;QACjD,KAAK,EAAE,6DAA6D;KACvE;IACD,mDAAmD,EAAE;QACjD,KAAK,EAAE,4BAA4B;KACtC;IACD,mDAAmD,EAAE;QACjD,KAAK,EAAE,8CAA8C;KACxD;IACD,2BAA2B,EAAE;QACzB,KAAK,EAAE,uCAAuC;KACjD;IACD,2CAA2C,EAAE;QACzC,KAAK,EAAE,wDAAwD;KAClE;IACD,8CAA8C,EAAE;QAC5C,KAAK,EAAE,oEAAoE;KAC9E;IACD,iDAAiD,EAAE;QAC/C,KAAK,EAAE,wBAAwB;KAClC;IACD,iDAAiD,EAAE;QAC/C,KAAK,EAAE,uDAAuD;YAC1D,gCAAgC;KACvC;IACD,iDAAiD,EAAE;QAC/C,KAAK,EAAE,8CAA8C;YACjD,gCAAgC;KACvC;IACD,+BAA+B,EAAE;QAE7B,KAAK,EAAE,oCAAoC;YACvC,uCAAuC;YACvC,cAAc;YACd,oDAAoD;YACpD,gBAAgB;YAChB,kCAAkC;YAClC,+DAA+D;YAC/D,eAAe;YACf,aAAa;YACb,eAAe;YACf,UAAU;KAEjB;IACD,gCAAgC,EAAE;QAE9B,KAAK,EAAE,QAAQ;YACX,2BAA2B;YAC3B,wBAAwB;YACxB,cAAc;YACd,SAAS;KAEhB;IACD,gCAAgC,EAAE;QAE9B,KAAK,EAAE,QAAQ;YACX,2BAA2B;YAC3B,kCAAkC;YAClC,cAAc;YACd,SAAS;KAEhB;IACD,kCAAkC,EAAE;QAEhC,KAAK,EAAE,yDAAyD;KAEnE;IAED,mCAAmC,EAAE;QAEjC,KAAK,EAAE,oCAAoC;KAE9C;IAED,6CAA6C,EAAE;QAE3C,KAAK,EAAE,kCAAkC;KAE5C;IAED,oBAAoB,EAAE;QAElB,KAAK,EAAE,yDAAyD;KAEnE;IACD,+BAA+B,EAAE;QAE7B,KAAK,EAAE,4DAA4D;KAEtE;IAED,8BAA8B,EAAE;QAE5B,KAAK,EAAE,+CAA+C;KAEzD;IACD,iCAAiC,EAAE;QAE/B,KAAK,EAAE,kFAAkF;KAE5F;IAED,oCAAoC,EAAE;QAElC,KAAK,EAAE,qNASA;KAEV;IAED,mCAAmC,EAAE;QAEjC,KAAK,EAAE,4BAA4B;KAEtC;IAED,kDAAkD,EAAE;QAEhD,KAAK,EAAE,8CAA8C;YACjD,oCAAoC;KAE3C;IAED,wDAAwD,EAAE;QAEtD,KAAK,EAAE,oCAAoC;YACvC,sBAAsB;KAE7B;IAED,sCAAsC,EAAE;QAEpC,KAAK,EAAE,uCAAuC;KAEjD;IAED,qDAAqD,EAAE;QAEnD,KAAK,EAAE,8CAA8C;YACjD,8CAA8C;KAErD;IAED,2DAA2D,EAAE;QAEzD,KAAK,EAAE,qEAAqE;KAE/E;IAED,iCAAiC,EAAE;QAE/B,KAAK,EAAE,mCAAmC;KAE7C;IAED,sCAAsC,EAAE;QAEpC,KAAK,EAAE,+CAA+C;KACzD;IAED,4CAA4C,EAAE;QAE1C,KAAK,EAAE,oEAAoE;KAE9E;IACD,4CAA4C,EAAE;QAE1C,KAAK,EAAE,6DAA6D;YAChE,0BAA0B;KAEjC;IACD,6CAA6C,EAAE;QAE3C,KAAK,EAAE,gEAAgE;KAE1E;IAED,mCAAmC,EAAE;QAEjC,KAAK,EAAE,wCAAwC;KAElD;IACD,uCAAuC,EAAE;QAErC,KAAK,EAAE,0BAA0B;KAEpC;IACD,iCAAiC,EAAE;QAE/B,KAAK,EAAE,qDAAqD;KAE/D;IACD,sDAAsD,EAAE;QAEpD,KAAK,EAAE,yDAAyD;KAEnE;IACD,sCAAsC,EAAE,4FAIvC;IACD,gCAAgC,EAAE;QAE9B,KAAK,EAAE,+BAA+B;KAEzC;IACD,mCAAmC,EAAE;QAEjC,KAAK,EAAE,iEAAiE;KAE3E;IACD,gCAAgC,EAAE;QAE9B,KAAK,EAAE,yBAAyB;KAEnC;IACD,8BAA8B,EAAE;QAE5B,KAAK,EAAE,+BAA+B;KAEzC;IACD,2CAA2C,EAAE;QAEzC,KAAK,EAAE,gCAAgC;KAE1C;IACD,yBAAyB,EAAE;QAEvB,KAAK,EAAE,iEAAiE;KAC3E;IACD,oDAAoD,EAAE;QAElD,KAAK,EAAE,8BAA8B;KAExC;IACD,8CAA8C,EAAE;QAE5C,KAAK,EAAE,0RAkBP;KAEH;IACD,0BAA0B,EAAE;QAExB,KAAK,EAAE,61CAkDN;KAEJ;IAED,kCAAkC,EAAE;QAEhC,KAAK,EAAE,mDAAmD;KAE7D;IAED,gCAAgC,EAAE;QAE9B,KAAK,EAAE,0BAA0B;YAC7B,2DAA2D;KAElE;IAED,sCAAsC,EAAE;QAEpC,KAAK,EAAE,gCAAgC;YACnC,oEAAoE;YACpE,2BAA2B;KAElC;IAED,qCAAqC,EAAE,uCAAuC;IAE9E,6CAA6C,EACzC,8CAA8C;IAElD,qCAAqC,EAAE,0LAQhC;IAEP,mCAAmC,EAC/B,kDAAkD;IAEtD,sCAAsC,EAClC,uDAAuD;IAE3D,sCAAsC,EAClC,6DAA6D;IAEjE,oDAAoD,EAChD,gDAAgD;IAEpD,0CAA0C,EACtC,8CAA8C;IAElD,wDAAwD,EACpD,kDAAkD;IAEtD,gEAAgE,EAC5D,oDAAoD;IAExD,uDAAuD,EACnD,2CAA2C;IAE/C,qDAAqD,EACjD,sDAAsD;IAE1D,2CAA2C,EACvC,oDAAoD;IAExD,8CAA8C,EAC1C,4DAA4D;IAEhE,8CAA8C,EAC1C,oEAAoE;IAExE,mDAAmD,EAC/C,yDAAyD;IAE7D,sDAAsD,EAClD,kEAAkE;IAEtE,sDAAsD,EAClD,2EAA2E;IAE/E,6CAA6C,EACzC,8CAA8C;IAElD,gDAAgD,EAC5C,gEAAgE;IAEpE,gDAAgD,EAC5C,+EAA+E;IAEnF,2CAA2C,EACvC,wDAAwD;IAE5D,8CAA8C,EAC1C,kEAAkE;IAEtE,8CAA8C,EAC1C,4EAA4E;IAEhF,2CAA2C,EACvC,8DAA8D;IAElE,8CAA8C,EAC1C,oFAAoF;IAExF,8CAA8C,EAC1C,8HAEI;IAER,+DAA+D,EAC3D,wDAAwD;IAE5D,yDAAyD,EACrD,sDAAsD;IAE1D,4CAA4C,EAAE;QAE1C,KAAK,EAAE,ulDA+DH;KAEP;IAED,4CAA4C,EAAE;QAE1C,KAAK,EAAE,mNAUJ;KAEN;IAED,kCAAkC,EAAE;QAEhC,KAAK,EAAE,6fAWsD;KAChE;IAED,gEAAgE,EAC5D,oDAAkD;IAEtD,8BAA8B,EAC1B,qEAAqE;IAEzE,yBAAyB,EAAE,6CAA6C;IAExE,6BAA6B,EACzB,6CAA6C;IAEjD,gDAAgD,EAC5C,0CAA0C;IAE9C,qCAAqC,EACjC,4bAaO;IAEX,sBAAsB,EAAE,kLAMrB;IAEH,kCAAkC,EAC9B,0EAA0E;IAE9E,mCAAmC,EAC/B,yGAEH;IAED,kCAAkC,EAAE,+IAInC;IAED,sCAAsC,EAAE,mCAAmC;IAE3E,qCAAqC,EAAE,6BAA6B;IAEpE,mDAAmD,EAC/C,6DAA6D;IAEjE,uDAAuD,EAAE,uDACT;IAEhD,iDAAiD,EAC7C,+HAKK;CAEZ,CAAA"}
package/lib/parse/test.ts CHANGED
@@ -556,12 +556,6 @@ export const tests: { [key: string]: any } = {
556
556
 
557
557
  'should parse tupe types': `{% type Tuple = [Number, String, Number] %}`,
558
558
 
559
- 'should parse primitives used as type':
560
- '{% type Prims = 1|2|"three"|true|false|"1,2,three,true,false" %}',
561
-
562
- 'should parse this type':
563
- '{% type SortDir = 1 | -1 %}',
564
-
565
559
  'should parse type assertion':
566
560
  '<Panel onClick={{ \e -> [*User]foo(e) }} />',
567
561
 
@@ -600,10 +594,28 @@ export const tests: { [key: string]: any } = {
600
594
  {% let head2:HeadCtx = {title = "My Title"} %}
601
595
  `,
602
596
 
603
- '[let] should be usable in a view':
604
- `{% view MyView(Object) %}
597
+ '[let] should be usable in a view': `
598
+ {% view MyView(Object) %}
605
599
  {% let head:HeadViewContext = {title = "My Title"} %}
606
600
  <h1>{{<HeadView(head)>}}</h1>
607
- `
601
+ `,
602
+
603
+ '[comment] should parse html comments': `<!-- This is an html comment. -->`,
604
+
605
+ '[comment] should parse wml comments': `{# This is a wml comment #}`,
606
+
607
+ '[comment] should parse wml comments in statements':
608
+ `{% view Name {# This is a comment! #} (Object) %} <div/> %}`,
609
+
610
+ '[fun] should parse multi dimensional array parameters': `
611
+ {% fun test (value:List[][]) %}<p/>{% endfun %}`,
612
+
613
+ 'should allow index access on context properties':
614
+ `{% view Test (Object) %}
615
+ <div>
616
+ {% if @["type"]?? %}
617
+ <div/>
618
+ {% endif %}
619
+ </div>`
608
620
 
609
621
  }
package/lib/parse/wml.y CHANGED
@@ -36,7 +36,8 @@ Text ({DoubleStringCharacter}*)|({SingleStringCharacter}*)
36
36
  /* Lexer flags */
37
37
  %options flex
38
38
  %x CHILDREN
39
- %x COMMENT
39
+ %x HTMLCOMMENT
40
+ %x WMLCOMMENT
40
41
  %x CONTROL
41
42
  %x INTERPOLATION
42
43
  %x CONTROL_CHILD
@@ -48,7 +49,8 @@ Text ({DoubleStringCharacter}*)|({SingleStringCharacter}*)
48
49
  <*>\s+ return;
49
50
 
50
51
  <INITIAL>'{%' this.begin('CONTROL'); return '{%';
51
- <INITIAL>'<!--' this.begin('COMMENT'); return;
52
+ <INITIAL>'<!--' this.begin('HTMLCOMMENT'); return;
53
+ <INITIAL>'{#' this.begin('WMLCOMMENT'); return;
52
54
  <INITIAL>'<' this.begin('ELEMENT'); return '<';
53
55
  <INITIAL>'{{' this.begin('INTERPOLATION'); return '{{';
54
56
 
@@ -65,7 +67,7 @@ Text ({DoubleStringCharacter}*)|({SingleStringCharacter}*)
65
67
 
66
68
  <CHILDREN>'{{' this.begin('INTERPOLATION'); return '{{';
67
69
  <CHILDREN>'{%' this.begin('CONTROL'); return '{%';
68
- <CHILDREN>'<!--' this.begin('COMMENT'); return;
70
+ <CHILDREN>'<!--' this.begin('HTMLCOMMENT'); return;
69
71
  <CHILDREN>'</' this.begin('ELEMENT'); return '</';
70
72
  <CHILDREN>'<' this.begin('ELEMENT'); return '<';
71
73
  <CHILDREN>'{' return '{';
@@ -104,6 +106,7 @@ Text ({DoubleStringCharacter}*)|({SingleStringCharacter}*)
104
106
  <CONTROL>'=' return '=';
105
107
  <CONTROL>'?' return '?';
106
108
  <CONTROL>'<' this.begin('ELEMENT'); return '<';
109
+ <CONTROL>'{#' this.begin('WMLCOMMENT'); return;
107
110
  <CONTROL>'{{' this.begin('INTERPOLATION');return '{{';
108
111
  <CONTROL>'%}' this.popState(); return '%}';
109
112
  <CONTROL>'{' return '{';
@@ -125,7 +128,8 @@ Text ({DoubleStringCharacter}*)|({SingleStringCharacter}*)
125
128
  <INTERPOLATION>'}' return '}';
126
129
  <INTERPOLATION>'}}' this.popState(); return '}}';
127
130
 
128
- <COMMENT>(.|\r|\n)*?'-->' this.popState(); return;
131
+ <HTMLCOMMENT>(.|\r|\n)*?'-->' this.popState(); return;
132
+ <WMLCOMMENT>(.|\r|\n)*?'#}' this.popState(); return;
129
133
 
130
134
  <*>{NumberLiteral} return 'NUMBER_LITERAL';
131
135
  <*>{StringLiteral} return 'STRING_LITERAL';
@@ -435,15 +439,6 @@ non_function_type
435
439
  : constructor_type
436
440
  { $$ = $1; }
437
441
 
438
- | string_literal
439
- { $$ = $1; }
440
-
441
- | number_literal
442
- { $$ = $1; }
443
-
444
- | boolean_literal
445
- { $$ = $1; }
446
-
447
442
  | record_type
448
443
  { $$ = $1; }
449
444
 
@@ -476,19 +471,10 @@ list_type
476
471
  { $$ = new yy.ast.ListType(
477
472
  new yy.ast.ConstructorType($1, []), @$); }
478
473
 
479
- | cons type_parameters '[' ']'
474
+ | cons type_parameters '[' ']'
480
475
  { $$ = new yy.ast.ListType(
481
476
  new yy.ast.ConstructorType($1, $2), @$); }
482
477
 
483
- | string_literal '[' ']'
484
- { $$ = new yy.ast.ListType($1, @$); }
485
-
486
- | number_literal '[' ']'
487
- { $$ = new yy.ast.ListType($1, @$); }
488
-
489
- | boolean_literal '[' ']'
490
- { $$ = new yy.ast.ListType($1, @$); }
491
-
492
478
  | record_type '[' ']'
493
479
  { $$ = new yy.ast.ListType($1, @$); }
494
480
 
@@ -504,7 +490,6 @@ list_type
504
490
  ;
505
491
 
506
492
  tuple_type
507
-
508
493
  : '[' ']'
509
494
  { $$ = new yy.ast.TupleType([], @$); }
510
495
 
@@ -743,19 +728,10 @@ characters
743
728
  ;
744
729
 
745
730
  arguments
746
- : '(' ')'
747
- {$$ = []; }
748
-
749
- | '(' argument_list ')'
750
- {$$ = $2; }
751
-
752
- ;
753
-
754
- argument_list
755
731
  : expression
756
732
  {$$ = [$1]; }
757
733
 
758
- | argument_list ',' expression
734
+ | arguments ',' expression
759
735
  {$$ = $1.concat($3); }
760
736
  ;
761
737
 
@@ -813,21 +789,18 @@ unary_expression
813
789
 
814
790
  | '(' expression ')' '??'
815
791
  {$$ = new yy.ast.UnaryExpression($4, $2, @$); }
816
-
817
792
  ;
818
793
 
819
794
  type_assertion
820
-
821
795
  : '[' '*' type ']' expression
822
796
  {$$ = new yy.ast.TypeAssertion($3, $5, @$); }
823
797
  ;
824
798
 
825
799
  simple_expression
826
800
  : (
827
- view_construction
828
- |fun_application
829
- |construct_expression
801
+ construct_expression
830
802
  |call_expression
803
+ |view_construction
831
804
  |member_expression
832
805
  |literal
833
806
  |context_property
@@ -838,31 +811,11 @@ simple_expression
838
811
  ;
839
812
 
840
813
  view_construction
841
- : '<' cons '(' expression ')' '>'
842
- { $$ = new yy.ast.ViewConstruction($2, $4, @$); }
843
- ;
844
-
845
- fun_application
846
- : '<' fun_target type_arguments arguments '>'
847
- { $$ = new yy.ast.FunApplication($2, $3, $4, @$); }
814
+ : '<' simple_expression '>'
815
+ { $$ = new yy.ast.ViewConstruction($2, @$); }
848
816
 
849
- | '<' fun_target arguments '>'
850
- { $$ = new yy.ast.FunApplication($2, [], $3, @$); }
851
-
852
- | '<' fun_target '>'
853
- { $$ = new yy.ast.FunApplication($2, [], [], @$); }
854
-
855
- ;
856
-
857
- fun_target
858
- : identifier
859
- { $$ = $1; }
860
-
861
- | context_property
862
- { $$ = $1; }
863
-
864
- | '(' expression ')'
865
- { $$ = $2; }
817
+ | '<' '(' expression ')' '>'
818
+ { $$ = new yy.ast.ViewConstruction($3, @$); }
866
819
  ;
867
820
 
868
821
  type_arguments
@@ -879,37 +832,67 @@ type_arg_list
879
832
  ;
880
833
 
881
834
  construct_expression
882
- : cons arguments
883
- { $$ = new yy.ast.ConstructExpression($1, $2, @$); }
835
+ : cons '(' arguments ')'
836
+ { $$ = new yy.ast.ConstructExpression($1, $3, @$); }
837
+
838
+ | cons '(' ')'
839
+ { $$ = new yy.ast.ConstructExpression($1, [], @$); }
884
840
  ;
885
841
 
886
842
  call_expression
887
- : identifier type_arguments arguments
888
- {$$ = new yy.ast.CallExpression($1, $2, $3, @$); }
843
+ : identifier type_arguments '(' arguments ')'
844
+ {$$ = new yy.ast.CallExpression($1, $2, $4, @$); }
845
+
846
+ | identifier type_arguments '(' ')'
847
+ {$$ = new yy.ast.CallExpression($1, $2, [], @$); }
889
848
 
890
- | identifier arguments
891
- {$$ = new yy.ast.CallExpression($1, [], $2, @$); }
849
+ | identifier '(' arguments ')'
850
+ {$$ = new yy.ast.CallExpression($1, [], $3, @$); }
892
851
 
893
- | context_property type_arguments arguments
894
- {$$ = new yy.ast.CallExpression($1, $2, $3, @$); }
852
+ | identifier '(' ')'
853
+ {$$ = new yy.ast.CallExpression($1, [], [], @$); }
895
854
 
896
- | context_property arguments
897
- {$$ = new yy.ast.CallExpression($1, [], $2, @$); }
855
+ | context_property type_arguments '(' arguments ')'
856
+ {$$ = new yy.ast.CallExpression($1, $2, $4, @$); }
898
857
 
899
- | member_expression type_arguments arguments
900
- {$$ = new yy.ast.CallExpression($1, $2, $3, @$); }
858
+ | context_property type_arguments '(' ')'
859
+ {$$ = new yy.ast.CallExpression($1, $2, [], @$); }
901
860
 
902
- | member_expression arguments
903
- {$$ = new yy.ast.CallExpression($1, [], $2, @$); }
861
+ | context_property '(' arguments ')'
862
+ {$$ = new yy.ast.CallExpression($1, [], $3, @$); }
904
863
 
905
- | '(' expression ')' type_arguments arguments
906
- {$$ = new yy.ast.CallExpression($2, $4, $5, @$); }
864
+ | context_property '(' ')'
865
+ {$$ = new yy.ast.CallExpression($1, [], [], @$); }
907
866
 
908
- | '(' expression ')' arguments
909
- {$$ = new yy.ast.CallExpression($2, [], $4, @$); }
867
+ | member_expression type_arguments '(' arguments ')'
868
+ {$$ = new yy.ast.CallExpression($1, $2, $4, @$); }
910
869
 
911
- | call_expression arguments
912
- {$$ = new yy.ast.CallExpression($1, [], $2, @$); }
870
+ | member_expression type_arguments '(' ')'
871
+ {$$ = new yy.ast.CallExpression($1, $2, [], @$); }
872
+
873
+ | member_expression '(' arguments ')'
874
+ {$$ = new yy.ast.CallExpression($1, [], $3, @$); }
875
+
876
+ | member_expression '(' ')'
877
+ {$$ = new yy.ast.CallExpression($1, [], [], @$); }
878
+
879
+ | '(' expression ')' type_arguments '(' arguments ')'
880
+ {$$ = new yy.ast.CallExpression($2, $4, $6, @$); }
881
+
882
+ | '(' expression ')' type_arguments '(' ')'
883
+ {$$ = new yy.ast.CallExpression($2, $4, [], @$); }
884
+
885
+ | '(' expression ')' '(' arguments ')'
886
+ {$$ = new yy.ast.CallExpression($2, [], $5, @$); }
887
+
888
+ | '(' expression ')' '(' ')'
889
+ {$$ = new yy.ast.CallExpression($2, [], [], @$); }
890
+
891
+ | call_expression '(' arguments ')'
892
+ {$$ = new yy.ast.CallExpression($1, [], $3, @$); }
893
+
894
+ | call_expression '(' ')'
895
+ {$$ = new yy.ast.CallExpression($1, [], [], @$); }
913
896
  ;
914
897
 
915
898
  member_expression
@@ -943,6 +926,9 @@ member_expression
943
926
 
944
927
  | member_expression '.' unqualified_identifier
945
928
  {$$ = new yy.ast.MemberExpression($1, $3, @$); }
929
+
930
+ | member_expression '[' string_literal ']'
931
+ {$$ = new yy.ast.MemberExpression($1, $3, @$); }
946
932
  ;
947
933
 
948
934
  function_expression
@@ -986,7 +972,7 @@ list
986
972
  : '[' ']'
987
973
  {$$ = new yy.ast.List([], @$); }
988
974
 
989
- | '[' argument_list ']'
975
+ | '[' arguments ']'
990
976
  {$$ = new yy.ast.List($2, @$); }
991
977
  ;
992
978
 
@@ -1011,6 +997,9 @@ boolean_literal
1011
997
  context_property
1012
998
  : '@' unqualified_identifier
1013
999
  { $$ = new yy.ast.ContextProperty($2, @$) }
1000
+
1001
+ | '@' '[' string_literal ']'
1002
+ { $$ = new yy.ast.ContextProperty($3, @$) }
1014
1003
  ;
1015
1004
 
1016
1005
  context_variable
package/package.json CHANGED
@@ -1,8 +1,11 @@
1
1
  {
2
2
  "name": "@quenk/wml",
3
- "version": "2.10.0",
3
+ "version": "2.10.4",
4
4
  "description": "(WML) is a DSL for describing user interfaces in web applications.",
5
5
  "main": "lib/index.js",
6
+ "scripts": {
7
+ "test": "./node_modules/.bin/mocha $(find -name *_test.ts)"
8
+ },
6
9
  "types": "lib/index.d.ts",
7
10
  "files": [
8
11
  "lib"