Allow trailing commas in macros + functions + filters

This commit is contained in:
Jannik Zschiesche
2020-07-06 10:34:46 +02:00
committed by Fabien Potencier
parent 471e965e9e
commit ccc2dbb043
5 changed files with 47 additions and 1 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
# 1.43.1 (2020-XX-XX)
* n/a
* Allow trailing commas in argument lists (in calls as well as definitions)
# 1.43.0 (2020-07-05)
+5
View File
@@ -598,6 +598,11 @@ class ExpressionParser
while (!$stream->test(Token::PUNCTUATION_TYPE, ')')) {
if (!empty($args)) {
$stream->expect(Token::PUNCTUATION_TYPE, ',', 'Arguments must be separated by a comma');
// if the comma above was a trailing comma, early exit the argument parse loop
if ($stream->test(/* Token::PUNCTUATION_TYPE */ 9, ')')) {
break;
}
}
if ($definition) {
@@ -0,0 +1,8 @@
--TEST--
filters allow trailing commas in their argument list
--TEMPLATE--
{{ 42.55|round(1, 'floor',) }}
--DATA--
return []
--EXPECT--
42.5
@@ -0,0 +1,8 @@
--TEST--
functions allow trailing commas in their argument list
--TEMPLATE--
{{ max(1, 2, 3,) }}
--DATA--
return []
--EXPECT--
3
@@ -0,0 +1,25 @@
--TEST--
macros allow trailing commas in their argument and parameter list
--TEMPLATE--
{% import _self as test %}
{% macro test(a, b,) -%}
{{ a|default('a') }}<br />
{{- b|default('b') }}<br />
{%- endmacro %}
{% macro test2(a, b) -%}
{{ a|default('a') }}<br />
{{- b|default('b') }}<br />
{%- endmacro %}
{{ test.test(1, 2,) }}
{{ test.test(3, 4) }}
{{ test.test2(5, 6,) }}
{{ test.test2(7, 8) }}
--DATA--
return []
--EXPECT--
1<br />2<br />
3<br />4<br />
5<br />6<br />
7<br />8<br />