]> git.ipfire.org Git - thirdparty/jinja.git/commitdiff
Add support for if/else expressions in grammar
authorKevin <kevin@kevin-brown.com>
Tue, 12 May 2020 01:03:45 +0000 (21:03 -0400)
committerKevin <kevin@kevin-brown.com>
Tue, 12 May 2020 01:03:45 +0000 (21:03 -0400)
These fall under a special type of conditional expression and can
only be used in certain places. The grammar for test functions
needed to be updated to rejected test function parameters if they
are only called "else", since that is likely to be for an if/else
expression. This matches the existing behaviour of the Jinja parser.

grammar.ebnf

index eae5e8d018be1899a7f0147b6357df5d8e54a88a..0619ac1cbd01f3d7d1a71c29880880c2762b45c6 100644 (file)
@@ -218,11 +218,20 @@ variable_accessor_call_parameter_value
 \r
 conditional_expression\r
     =\r
+    | conditional_expression_if\r
     | conditional_expression_logical\r
     | conditional_expression_comparator\r
     | conditional_expression_test\r
     ;\r
 \r
+conditional_expression_if\r
+    =\r
+    true_value:variable_identifier\r
+    {SP}* "if" {SP}*\r
+    test_expression:conditional_expression\r
+    [ {SP}* "else" {SP}* false_value:conditional_expression ]\r
+    ;\r
+\r
 conditional_expression_logical\r
     =\r
     left:conditional_expression\r
@@ -244,7 +253,7 @@ conditional_expression_test
     test_function:variable_identifier\r
     [\r
         {SP}*\r
-        !( (variable_tests_logical_operator | "is") {SP}* )\r
+        !( (variable_tests_logical_operator | "is" | "else" ) {SP}* )\r
         test_function_parameter:variable_accessor_call_parameter_value\r
     ]\r
     ;\r