mirror of
https://github.com/twigphp/Twig.git
synced 2026-09-13 02:46:29 +00:00
feature #4364 Deprecate not passing AbstractExpression args to most constructor arguments for classes extending AbstractExpression (fabpot)
This PR was merged into the 3.x branch.
Discussion
----------
Deprecate not passing AbstractExpression args to most constructor arguments for classes extending AbstractExpression
Commits
-------
824143d5e5 Deprecate not passing AbstractExpression args to most constructor arguments for classes extending AbstractExpression
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
# 3.15.0 (2024-XX-XX)
|
||||
|
||||
* Deprecate not passing `AbstractExpression` args to most constructor arguments for classes extending `AbstractExpression`
|
||||
* Fix `power` expressions with a negative number in parenthesis (`(-1) ** 2`)
|
||||
* Deprecate instantiating `Node` directly. Use `EmptyNode` or `Nodes` instead.
|
||||
* Add support for inline comments
|
||||
|
||||
@@ -296,3 +296,17 @@ Node
|
||||
* Instantiating ``Twig\Node\Node`` directly is deprecated as of Twig 3.15. Use
|
||||
``EmptyNode`` or ``Nodes`` instead depending on the use case. The
|
||||
``Twig\Node\Node`` class will be abstract in Twig 4.0.
|
||||
|
||||
* Not passing ``AbstractExpression`` arguments to the following ``Node`` class
|
||||
constructors is deprecated as of Twig 3.15:
|
||||
|
||||
* ``AbstractBinary``
|
||||
* ``AbstractUnary``
|
||||
* ``BlockReferenceExpression``
|
||||
* ``TestExpression``
|
||||
* ``DefinedTest``
|
||||
* ``FilterExpression``
|
||||
* ``RawFilter``
|
||||
* ``DefaultFilter``
|
||||
* ``InlinePrint``
|
||||
* ``NullCoalesceExpression``
|
||||
|
||||
@@ -18,8 +18,19 @@ use Twig\Node\Node;
|
||||
|
||||
abstract class AbstractBinary extends AbstractExpression
|
||||
{
|
||||
/**
|
||||
* @param AbstractExpression $left
|
||||
* @param AbstractExpression $right
|
||||
*/
|
||||
public function __construct(Node $left, Node $right, int $lineno)
|
||||
{
|
||||
if (!$left instanceof AbstractExpression) {
|
||||
trigger_deprecation('twig/twig', '3.15', 'Not passing a "%s" instance to the "left" argument of "%s" is deprecated ("%s" given).', AbstractExpression::class, static::class, get_class($left));
|
||||
}
|
||||
if (!$right instanceof AbstractExpression) {
|
||||
trigger_deprecation('twig/twig', '3.15', 'Not passing a "%s" instance to the "right" argument of "%s" is deprecated ("%s" given).', AbstractExpression::class, static::class, get_class($right));
|
||||
}
|
||||
|
||||
parent::__construct(['left' => $left, 'right' => $right], [], $lineno);
|
||||
}
|
||||
|
||||
|
||||
@@ -22,8 +22,15 @@ use Twig\Node\Node;
|
||||
*/
|
||||
class BlockReferenceExpression extends AbstractExpression
|
||||
{
|
||||
/**
|
||||
* @param AbstractExpression $name
|
||||
*/
|
||||
public function __construct(Node $name, ?Node $template, int $lineno)
|
||||
{
|
||||
if (!$name instanceof AbstractExpression) {
|
||||
trigger_deprecation('twig/twig', '3.15', 'Not passing a "%s" instance to the "node" argument of "%s" is deprecated ("%s" given).', AbstractExpression::class, static::class, get_class($node));
|
||||
}
|
||||
|
||||
$nodes = ['name' => $name];
|
||||
if (null !== $template) {
|
||||
$nodes['template'] = $template;
|
||||
|
||||
@@ -15,6 +15,7 @@ use Twig\Attribute\FirstClassTwigCallableReady;
|
||||
use Twig\Compiler;
|
||||
use Twig\Extension\CoreExtension;
|
||||
use Twig\Node\EmptyNode;
|
||||
use Twig\Node\Expression\AbstractExpression;
|
||||
use Twig\Node\Expression\ConditionalExpression;
|
||||
use Twig\Node\Expression\ConstantExpression;
|
||||
use Twig\Node\Expression\FilterExpression;
|
||||
@@ -34,9 +35,16 @@ use Twig\TwigTest;
|
||||
*/
|
||||
class DefaultFilter extends FilterExpression
|
||||
{
|
||||
/**
|
||||
* @param AbstractExpression $node
|
||||
*/
|
||||
#[FirstClassTwigCallableReady]
|
||||
public function __construct(Node $node, TwigFilter|ConstantExpression $filter, Node $arguments, int $lineno)
|
||||
{
|
||||
if (!$node instanceof AbstractExpression) {
|
||||
trigger_deprecation('twig/twig', '3.15', 'Not passing a "%s" instance to the "node" argument of "%s" is deprecated ("%s" given).', AbstractExpression::class, static::class, get_class($node));
|
||||
}
|
||||
|
||||
if ($filter instanceof TwigFilter) {
|
||||
$name = $filter->getName();
|
||||
$default = new FilterExpression($node, $filter, $arguments, $node->getTemplateLine());
|
||||
|
||||
@@ -14,6 +14,7 @@ namespace Twig\Node\Expression\Filter;
|
||||
use Twig\Attribute\FirstClassTwigCallableReady;
|
||||
use Twig\Compiler;
|
||||
use Twig\Node\EmptyNode;
|
||||
use Twig\Node\Expression\AbstractExpression;
|
||||
use Twig\Node\Expression\ConstantExpression;
|
||||
use Twig\Node\Expression\FilterExpression;
|
||||
use Twig\Node\Node;
|
||||
@@ -24,9 +25,16 @@ use Twig\TwigFilter;
|
||||
*/
|
||||
class RawFilter extends FilterExpression
|
||||
{
|
||||
/**
|
||||
* @param AbstractExpression $node
|
||||
*/
|
||||
#[FirstClassTwigCallableReady]
|
||||
public function __construct(Node $node, TwigFilter|ConstantExpression|null $filter = null, ?Node $arguments = null, int $lineno = 0)
|
||||
{
|
||||
if (!$node instanceof AbstractExpression) {
|
||||
trigger_deprecation('twig/twig', '3.15', 'Not passing a "%s" instance to the "node" argument of "%s" is deprecated ("%s" given).', AbstractExpression::class, static::class, get_class($node));
|
||||
}
|
||||
|
||||
parent::__construct($node, $filter ?: new TwigFilter('raw', null, ['is_safe' => ['all']]), $arguments ?: new EmptyNode(), $lineno ?: $node->getTemplateLine());
|
||||
}
|
||||
|
||||
|
||||
@@ -20,9 +20,16 @@ use Twig\TwigFilter;
|
||||
|
||||
class FilterExpression extends CallExpression
|
||||
{
|
||||
/**
|
||||
* @param AbstractExpression $node
|
||||
*/
|
||||
#[FirstClassTwigCallableReady]
|
||||
public function __construct(Node $node, TwigFilter|ConstantExpression $filter, Node $arguments, int $lineno)
|
||||
{
|
||||
if (!$node instanceof AbstractExpression) {
|
||||
trigger_deprecation('twig/twig', '3.15', 'Not passing a "%s" instance to the "node" argument of "%s" is deprecated ("%s" given).', AbstractExpression::class, static::class, get_class($node));
|
||||
}
|
||||
|
||||
if ($filter instanceof TwigFilter) {
|
||||
$name = $filter->getName();
|
||||
$filterName = new ConstantExpression($name, $lineno);
|
||||
|
||||
@@ -19,8 +19,15 @@ use Twig\Node\Node;
|
||||
*/
|
||||
final class InlinePrint extends AbstractExpression
|
||||
{
|
||||
/**
|
||||
* @param AbstractExpression $node
|
||||
*/
|
||||
public function __construct(Node $node, int $lineno)
|
||||
{
|
||||
if (!$node instanceof AbstractExpression) {
|
||||
trigger_deprecation('twig/twig', '3.15', 'Not passing a "%s" instance to the "node" argument of "%s" is deprecated ("%s" given).', AbstractExpression::class, static::class, get_class($node));
|
||||
}
|
||||
|
||||
parent::__construct(['node' => $node], [], $lineno);
|
||||
}
|
||||
|
||||
|
||||
@@ -22,8 +22,19 @@ use Twig\TwigTest;
|
||||
|
||||
class NullCoalesceExpression extends ConditionalExpression
|
||||
{
|
||||
/**
|
||||
* @param AbstractExpression $left
|
||||
* @param AbstractExpression $right
|
||||
*/
|
||||
public function __construct(Node $left, Node $right, int $lineno)
|
||||
{
|
||||
if (!$left instanceof AbstractExpression) {
|
||||
trigger_deprecation('twig/twig', '3.15', 'Not passing a "%s" instance to the "left" argument of "%s" is deprecated ("%s" given).', AbstractExpression::class, static::class, get_class($left));
|
||||
}
|
||||
if (!$right instanceof AbstractExpression) {
|
||||
trigger_deprecation('twig/twig', '3.15', 'Not passing a "%s" instance to the "right" argument of "%s" is deprecated ("%s" given).', AbstractExpression::class, static::class, get_class($right));
|
||||
}
|
||||
|
||||
$test = new DefinedTest(clone $left, new TwigTest('defined'), new EmptyNode(), $left->getTemplateLine());
|
||||
// for "block()", we don't need the null test as the return value is always a string
|
||||
if (!$left instanceof BlockReferenceExpression) {
|
||||
|
||||
@@ -14,6 +14,7 @@ namespace Twig\Node\Expression\Test;
|
||||
use Twig\Attribute\FirstClassTwigCallableReady;
|
||||
use Twig\Compiler;
|
||||
use Twig\Error\SyntaxError;
|
||||
use Twig\Node\Expression\AbstractExpression;
|
||||
use Twig\Node\Expression\ArrayExpression;
|
||||
use Twig\Node\Expression\BlockReferenceExpression;
|
||||
use Twig\Node\Expression\ConstantExpression;
|
||||
@@ -37,9 +38,16 @@ use Twig\TwigTest;
|
||||
*/
|
||||
class DefinedTest extends TestExpression
|
||||
{
|
||||
/**
|
||||
* @param AbstractExpression $node
|
||||
*/
|
||||
#[FirstClassTwigCallableReady]
|
||||
public function __construct(Node $node, TwigTest|string $name, ?Node $arguments, int $lineno)
|
||||
{
|
||||
if (!$node instanceof AbstractExpression) {
|
||||
trigger_deprecation('twig/twig', '3.15', 'Not passing a "%s" instance to the "node" argument of "%s" is deprecated ("%s" given).', AbstractExpression::class, static::class, get_class($node));
|
||||
}
|
||||
|
||||
if ($node instanceof NameExpression) {
|
||||
$node->setAttribute('is_defined_test', true);
|
||||
} elseif ($node instanceof GetAttrExpression) {
|
||||
|
||||
@@ -20,8 +20,15 @@ use Twig\TwigTest;
|
||||
class TestExpression extends CallExpression
|
||||
{
|
||||
#[FirstClassTwigCallableReady]
|
||||
/**
|
||||
* @param AbstractExpression $node
|
||||
*/
|
||||
public function __construct(Node $node, string|TwigTest $test, ?Node $arguments, int $lineno)
|
||||
{
|
||||
if (!$node instanceof AbstractExpression) {
|
||||
trigger_deprecation('twig/twig', '3.15', 'Not passing a "%s" instance to the "node" argument of "%s" is deprecated ("%s" given).', AbstractExpression::class, static::class, get_class($node));
|
||||
}
|
||||
|
||||
$nodes = ['node' => $node];
|
||||
if (null !== $arguments) {
|
||||
$nodes['arguments'] = $arguments;
|
||||
|
||||
@@ -18,8 +18,15 @@ use Twig\Node\Node;
|
||||
|
||||
abstract class AbstractUnary extends AbstractExpression
|
||||
{
|
||||
/**
|
||||
* @param AbstractExpression $node
|
||||
*/
|
||||
public function __construct(Node $node, int $lineno)
|
||||
{
|
||||
if (!$node instanceof AbstractExpression) {
|
||||
trigger_deprecation('twig/twig', '3.15', 'Not passing a "%s" instance argument to "%s" is deprecated ("%s" given).', AbstractExpression::class, static::class, get_class($node));
|
||||
}
|
||||
|
||||
parent::__construct(['node' => $node], ['with_parentheses' => false], $lineno);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user