]> git.ipfire.org Git - thirdparty/jinja.git/commitdiff
Support implicit tuples in block parameters
authorKevin Brown <kevin@kevin-brown.com>
Fri, 8 May 2020 20:56:26 +0000 (16:56 -0400)
committerKevin <kevin@kevin-brown.com>
Sun, 10 May 2020 01:50:06 +0000 (21:50 -0400)
This fixes an issue where implicit tuples were not parsed correctly
when they were used as a key in a block parameter. Now for loops
and set statements with implicit tuples work properly. This only
supports implicit tuples when all values are identifiers, since
these are generally used for assignment and you cannot assign a
new value to a literal.

tatsu_grammar.txt

index a0d21e3a28f6dc0217b276b6d00571516ec380ee..d74e998f5e98759b915644be963c98a100a338d7 100644 (file)
@@ -39,7 +39,7 @@ block_expression
 \r
 block_start\r
     =\r
-    block_open type:`blockstart` !("end") name:IDENTIFIER parameters:[ { assignment_target }* ] block_close\r
+    block_open type:`blockstart` !("end") name:IDENTIFIER parameters:[ { block_parameter }* ] block_close\r
     ;\r
 \r
 block_end\r
@@ -56,15 +56,29 @@ block_close
     {SP}* @:"%}"\r
     ;\r
 \r
-assignment_target\r
+implicit_identifier_tuple\r
     =\r
-    tuple+:block_parameter {"," {SP}* tuple+:block_parameter}+\r
-    | block_parameter\r
+    {SP}* tuple+:IDENTIFIER {SP}* { "," {SP}* tuple+:IDENTIFIER {SP}* }+\r
     ;\r
 \r
 block_parameter\r
     =\r
-    variable_accessor_call_parameter\r
+    block_parameter_key_value | block_parameter_value_only\r
+    ;\r
+\r
+block_parameter_key_value\r
+    =\r
+    key:block_parameter_key "=" value:variable_accessor_call_parameter_value\r
+    ;\r
+\r
+block_parameter_key\r
+    =\r
+    implicit_identifier_tuple | variable_accessor_call_parameter_key\r
+    ;\r
+\r
+block_parameter_value_only\r
+    =\r
+    value:implicit_identifier_tuple | value:variable_accessor_call_parameter_value\r
     ;\r
 \r
 variable_expression\r
@@ -115,7 +129,7 @@ variable_accessor_call_parameter
 \r
 variable_accessor_call_parameter_key_value\r
     =\r
-    {SP}* key:IDENTIFIER {SP}* "=" value:variable_accessor_call_parameter_value {SP}*\r
+    key:variable_accessor_call_parameter_key "=" value:variable_accessor_call_parameter_value {SP}*\r
     ;\r
 \r
 variable_accessor_call_parameter_value_only\r
@@ -123,6 +137,11 @@ variable_accessor_call_parameter_value_only
     value:variable_accessor_call_parameter_value\r
     ;\r
 \r
+variable_accessor_call_parameter_key\r
+    =\r
+    {SP}* key:IDENTIFIER {SP}*\r
+    ;\r
+\r
 variable_accessor_call_parameter_value\r
     =\r
     {SP}* @:( variable_tests | variable_identifier ) {SP}*\r