]> git.ipfire.org Git - thirdparty/jinja.git/commitdiff
Properly handle implicit tuples
authorKevin Brown <kevin@kevin-brown.com>
Sat, 16 May 2020 21:09:24 +0000 (17:09 -0400)
committerKevin Brown <kevin@kevin-brown.com>
Sat, 16 May 2020 21:09:24 +0000 (17:09 -0400)
This adds support for implicit tuple literals and removes support for
identifier tuples for now.

grammar.ebnf
src/jinja2/new_parser.py

index 18496d4af42114a31899f241330df2b4cd4a0ff2..3fef91a6287a71011531a55014d47b0c8616c42d 100644 (file)
@@ -134,11 +134,6 @@ line_block_parameters
     @+:block_parameter { { !"\n" SP }+ @+:block_parameter }*\r
     ;\r
 \r
-implicit_identifier_tuple\r
-    =\r
-    tuple+:IDENTIFIER { {SP}* "," {SP}* tuple+:IDENTIFIER }+\r
-    ;\r
-\r
 block_parameters\r
     =\r
     @+:block_parameter\r
@@ -167,13 +162,11 @@ block_parameter_key_value
 \r
 block_parameter_key\r
     =\r
-    | implicit_identifier_tuple\r
-    | variable_accessor_call_parameter_key\r
+    variable_accessor_call_parameter_key\r
     ;\r
 \r
 block_parameter_value_only\r
     =\r
-    | value:implicit_identifier_tuple\r
     | value:variable_identifier_with_alias\r
     | value:variable_accessor_call_parameter_value\r
     | value:conditional_expression\r
@@ -560,11 +553,29 @@ TUPLE_LITERAL
     =\r
     literal_type:`tuple`\r
     (\r
-        | ( "(" {SP}* value+:LITERAL {SP}* { "," {SP}* value+:LITERAL {SP}* }+ ")" )\r
-        | ( "(" {SP}* value+:LITERAL {SP}* "," {SP}* ")" )\r
+        | value:EXPLICIT_TUPLE_LITERAL\r
+        | value:IMPLICIT_TUPLE_LITERAL\r
+        | EMPTY_TUPLE_LITERAL\r
     )\r
     ;\r
 \r
+EXPLICIT_TUPLE_LITERAL\r
+    =\r
+    | ( "(" {SP}* @+:LITERAL {SP}* { "," {SP}* @+:LITERAL {SP}* }+ ")" )\r
+    | ( "(" {SP}* @+:LITERAL {SP}* "," {SP}* ")" )\r
+    ;\r
+\r
+IMPLICIT_TUPLE_LITERAL\r
+    =\r
+    | ( @+:LITERAL {SP}* { "," {SP}* @+:LITERAL {SP}* }+ )\r
+    | ( @+:LITERAL {SP}* "," {SP}* )\r
+    ;\r
+\r
+EMPTY_TUPLE_LITERAL\r
+    =\r
+    "(" {SP}* ")"\r
+    ;\r
+\r
 INTEGER_LITERAL\r
     =\r
     /[\d_]*\d+/\r
index 6d0fb901a80b5122513c63588b7c13c7877ee56a..844f9ae7107b6cb6e80088e65989f34d2c9dd92b 100644 (file)
@@ -837,9 +837,6 @@ def parse_template(ast):
     return nodes.Template(parse(ast), lineno=1)\r
 \r
 def parse_variable(ast, variable_context='load'):\r
-    if 'tuple' in ast:\r
-        return parse_variable_tuple(ast, variable_context)\r
-\r
     name = ast['variable']\r
 \r
     if 'literal_type' in name:\r
@@ -980,18 +977,6 @@ def parse_variable_filter(node, ast):
 \r
     return last_filter\r
 \r
-def parse_variable_tuple(ast, variable_context):\r
-    identifiers = []\r
-\r
-    for name in ast['tuple']:\r
-        identifiers.append(nodes.Name(name, variable_context))\r
-\r
-    return nodes.Tuple(\r
-        identifiers,\r
-        variable_context,\r
-        lineno=lineno_from_parseinfo(ast['parseinfo'])\r
-    )\r
-\r
 def _parse_import_context(block_parameters):\r
     if block_parameters[-1]['value']['variable'] != 'context':\r
         return None\r