]> git.ipfire.org Git - thirdparty/jinja.git/commitdiff
Allow variable identifiers to be aliased in block params
authorKevin <kevin@kevin-brown.com>
Sun, 10 May 2020 20:24:12 +0000 (16:24 -0400)
committerKevin <kevin@kevin-brown.com>
Sun, 10 May 2020 20:24:12 +0000 (16:24 -0400)
This is only really supported on the `{% from %}` block currently,
but the ability exists to use this elsewhere if someone is looking
for the ability to alias variable identifiers. This also allows
value-only parameters to be comma-separated within the block
parameters, since before that was only allows for key-value parameters.

grammar.ebnf
new_parser.py

index 93e9417237b759cc211a935083475d0c324e36db..f04cede105ec508990473cb31ccb2b212cedb090 100644 (file)
@@ -98,7 +98,13 @@ implicit_identifier_tuple
 \r
 block_parameters\r
     =\r
-    @+:block_parameter { {SP}* @+:block_parameter }*\r
+    @+:block_parameter\r
+    [ {SP}* "," ]\r
+    {\r
+        {SP}*\r
+        @+:block_parameter\r
+        [ {SP}* "," ]\r
+     }*\r
     ;\r
 \r
 block_parameter\r
@@ -110,7 +116,6 @@ block_parameter
 block_parameter_key_value\r
     =\r
     key:block_parameter_key {SP}* "=" {SP}* value:variable_accessor_call_parameter_value\r
-    [ {SP}* "," ]\r
     ;\r
 \r
 block_parameter_key\r
@@ -122,6 +127,7 @@ block_parameter_key
 block_parameter_value_only\r
     =\r
     | value:implicit_identifier_tuple\r
+    | value:variable_identifier_with_alias\r
     | value:variable_accessor_call_parameter_value\r
     ;\r
 \r
@@ -145,6 +151,13 @@ variable_identifier
     { {SP}* filters+:variable_filter }*\r
     ;\r
 \r
+variable_identifier_with_alias\r
+    =\r
+    variable:IDENTIFIER\r
+    {SP}* "as" {SP}*\r
+    alias:IDENTIFIER\r
+    ;\r
+\r
 variable_accessor\r
     =\r
     | variable_accessor_brackets\r
index b42a7f000ad547a38b5b1806d6efbee13d9784f7..fbaac6eb56eca98c1289bcb377f1cfcc83f90f02 100644 (file)
@@ -105,7 +105,16 @@ def parse_block_from(ast):
     with_context = False\r
 \r
     if len(parameters) > 2:\r
-        names = []#parameters[2:]\r
+        for parameter in parameters[2:]:\r
+            if 'alias' in parameter['value']:\r
+                names.append(\r
+                    (\r
+                        parameter['value']['variable'],\r
+                        parameter['value']['alias']\r
+                    )\r
+                )\r
+            else:\r
+                names.append(parameter['value']['variable'])\r
 \r
     from_import = nodes.FromImport(\r
         template,\r