diff --git a/CHANGELOG b/CHANGELOG index 6eac17dc9..02a8f2d51 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,5 +1,6 @@ # 3.15.0 (2024-XX-XX) + * Deprecate the `range` function, use the `..` operator * Deprecate `TempNameExpression` in favor of `LocalVariable` * Deprecate `NameExpression` in favor of `ContextVariable` * Deprecate `AssignNameExpression` in favor of `AssignContextVariable` diff --git a/doc/deprecated.rst b/doc/deprecated.rst index fed5cb380..0c8483ba2 100644 --- a/doc/deprecated.rst +++ b/doc/deprecated.rst @@ -28,6 +28,9 @@ Functions Note that it won't be removed in 4.0 to allow a smoother upgrade path. +* The ``range`` function is deprecated as of Twig 3.15, use the ``..`` operator + instead. + Extensions ---------- diff --git a/doc/functions/range.rst b/doc/functions/range.rst index e537b11a6..ba80b61be 100644 --- a/doc/functions/range.rst +++ b/doc/functions/range.rst @@ -1,6 +1,11 @@ ``range`` ========= +.. warning:: + + The ``range`` function is deprecated as of Twig 3.15. Use the ``..`` + operator instead. + Returns a list containing an arithmetic progression of integers: .. code-block:: twig diff --git a/src/Extension/CoreExtension.php b/src/Extension/CoreExtension.php index f8f80ac2f..645c797e7 100644 --- a/src/Extension/CoreExtension.php +++ b/src/Extension/CoreExtension.php @@ -260,7 +260,7 @@ final class CoreExtension extends AbstractExtension new TwigFunction('attribute', null, ['parser_callable' => [self::class, 'parseAttributeFunction']]), new TwigFunction('max', 'max'), new TwigFunction('min', 'min'), - new TwigFunction('range', 'range'), + new TwigFunction('range', 'range', ['deprecation_info' => new DeprecatedCallableInfo('twig/twig', '3.15')]), new TwigFunction('constant', [self::class, 'constant']), new TwigFunction('cycle', [self::class, 'cycle']), new TwigFunction('random', [self::class, 'random'], ['needs_charset' => true]), diff --git a/src/NodeVisitor/SandboxNodeVisitor.php b/src/NodeVisitor/SandboxNodeVisitor.php index ab51d33d4..c1b80030c 100644 --- a/src/NodeVisitor/SandboxNodeVisitor.php +++ b/src/NodeVisitor/SandboxNodeVisitor.php @@ -69,6 +69,7 @@ final class SandboxNodeVisitor implements NodeVisitorInterface } // the .. operator is equivalent to the range() function + // To be removed in 4.0 if ($node instanceof RangeBinary && !isset($this->functions['range'])) { $this->functions['range'] = $node->getTemplateLine(); } diff --git a/tests/Fixtures/functions/range.test b/tests/Fixtures/functions/range.legacy.test similarity index 56% rename from tests/Fixtures/functions/range.test rename to tests/Fixtures/functions/range.legacy.test index 2927333b9..3fa6a3777 100644 --- a/tests/Fixtures/functions/range.test +++ b/tests/Fixtures/functions/range.legacy.test @@ -1,5 +1,7 @@ --TEST-- "range" function +--DEPRECATION-- +Since twig/twig 3.15: Twig Function "range" is deprecated in index.twig at line 2. --TEMPLATE-- {{ range(low=0+1, high=10+0, step=2)|join(',') }} --DATA-- diff --git a/tests/Fixtures/whitespace/trim_block.test b/tests/Fixtures/whitespace/trim_block.test index 346a11076..2f85a0e56 100644 --- a/tests/Fixtures/whitespace/trim_block.test +++ b/tests/Fixtures/whitespace/trim_block.test @@ -2,13 +2,13 @@ Whitespace trimming on tags. --TEMPLATE-- Trim on control tag: -{% for i in range(1, 9) -%} +{% for i in 1..9 -%} {{ i }} {%- endfor %} Trim on output tag: -{% for i in range(1, 9) %} +{% for i in 1..9 %} {{- i -}} {% endfor %}