From 29d16b0e9acf3f948b5975bcfc873185905c9a93 Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Thu, 26 Sep 2024 21:27:11 +0200 Subject: [PATCH] [TwigBridge] Remove usage of Node() instantiations --- .../TranslationDefaultDomainNodeVisitor.php | 7 +- .../Bridge/Twig/Tests/Node/DumpNodeTest.php | 30 ++- .../Bridge/Twig/Tests/Node/FormThemeTest.php | 16 +- .../Node/SearchAndRenderBlockNodeTest.php | 181 ++++++++++++++---- .../TranslationNodeVisitorTest.php | 24 ++- .../Tests/NodeVisitor/TwigNodeProvider.php | 11 +- 6 files changed, 206 insertions(+), 63 deletions(-) diff --git a/src/Symfony/Bridge/Twig/NodeVisitor/TranslationDefaultDomainNodeVisitor.php b/src/Symfony/Bridge/Twig/NodeVisitor/TranslationDefaultDomainNodeVisitor.php index 12eaad3796081..d218f62eec85f 100644 --- a/src/Symfony/Bridge/Twig/NodeVisitor/TranslationDefaultDomainNodeVisitor.php +++ b/src/Symfony/Bridge/Twig/NodeVisitor/TranslationDefaultDomainNodeVisitor.php @@ -22,6 +22,7 @@ use Twig\Node\Expression\NameExpression; use Twig\Node\ModuleNode; use Twig\Node\Node; +use Twig\Node\Nodes; use Twig\Node\SetNode; use Twig\NodeVisitor\NodeVisitorInterface; @@ -53,7 +54,11 @@ public function enterNode(Node $node, Environment $env): Node $name = new AssignNameExpression($var, $node->getTemplateLine()); $this->scope->set('domain', new NameExpression($var, $node->getTemplateLine())); - return new SetNode(false, new Node([$name]), new Node([$node->getNode('expr')]), $node->getTemplateLine()); + if (class_exists(Nodes::class)) { + return new SetNode(false, new Nodes([$name]), new Nodes([$node->getNode('expr')]), $node->getTemplateLine()); + } else { + return new SetNode(false, new Node([$name]), new Node([$node->getNode('expr')]), $node->getTemplateLine()); + } } } diff --git a/src/Symfony/Bridge/Twig/Tests/Node/DumpNodeTest.php b/src/Symfony/Bridge/Twig/Tests/Node/DumpNodeTest.php index f655a04ae3bd6..a19ba0414863d 100644 --- a/src/Symfony/Bridge/Twig/Tests/Node/DumpNodeTest.php +++ b/src/Symfony/Bridge/Twig/Tests/Node/DumpNodeTest.php @@ -18,6 +18,7 @@ use Twig\Loader\LoaderInterface; use Twig\Node\Expression\NameExpression; use Twig\Node\Node; +use Twig\Node\Nodes; class DumpNodeTest extends TestCase { @@ -71,9 +72,16 @@ public function testIndented() public function testOneVar() { - $vars = new Node([ - new NameExpression('foo', 7), - ]); + if (class_exists(Nodes::class)) { + $vars = new Nodes([ + new NameExpression('foo', 7), + ]); + } else { + $vars = new Node([ + new NameExpression('foo', 7), + ]); + } + $node = new DumpNode('bar', $vars, 7); $env = new Environment($this->createMock(LoaderInterface::class)); @@ -94,10 +102,18 @@ public function testOneVar() public function testMultiVars() { - $vars = new Node([ - new NameExpression('foo', 7), - new NameExpression('bar', 7), - ]); + if (class_exists(Nodes::class)) { + $vars = new Nodes([ + new NameExpression('foo', 7), + new NameExpression('bar', 7), + ]); + } else { + $vars = new Node([ + new NameExpression('foo', 7), + new NameExpression('bar', 7), + ]); + } + $node = new DumpNode('bar', $vars, 7); $env = new Environment($this->createMock(LoaderInterface::class)); diff --git a/src/Symfony/Bridge/Twig/Tests/Node/FormThemeTest.php b/src/Symfony/Bridge/Twig/Tests/Node/FormThemeTest.php index cf98191233057..d211bf26974c4 100644 --- a/src/Symfony/Bridge/Twig/Tests/Node/FormThemeTest.php +++ b/src/Symfony/Bridge/Twig/Tests/Node/FormThemeTest.php @@ -23,6 +23,7 @@ use Twig\Node\Expression\ConstantExpression; use Twig\Node\Expression\NameExpression; use Twig\Node\Node; +use Twig\Node\Nodes; class FormThemeTest extends TestCase { @@ -31,10 +32,17 @@ class FormThemeTest extends TestCase public function testConstructor() { $form = new NameExpression('form', 0); - $resources = new Node([ - new ConstantExpression('tpl1', 0), - new ConstantExpression('tpl2', 0), - ]); + if (class_exists(Nodes::class)) { + $resources = new Nodes([ + new ConstantExpression('tpl1', 0), + new ConstantExpression('tpl2', 0), + ]); + } else { + $resources = new Node([ + new ConstantExpression('tpl1', 0), + new ConstantExpression('tpl2', 0), + ]); + } $node = new FormThemeNode($form, $resources, 0); diff --git a/src/Symfony/Bridge/Twig/Tests/Node/SearchAndRenderBlockNodeTest.php b/src/Symfony/Bridge/Twig/Tests/Node/SearchAndRenderBlockNodeTest.php index c2fdb4e778541..2e09704cebb64 100644 --- a/src/Symfony/Bridge/Twig/Tests/Node/SearchAndRenderBlockNodeTest.php +++ b/src/Symfony/Bridge/Twig/Tests/Node/SearchAndRenderBlockNodeTest.php @@ -23,15 +23,22 @@ use Twig\Node\Expression\ConstantExpression; use Twig\Node\Expression\NameExpression; use Twig\Node\Node; +use Twig\Node\Nodes; use Twig\TwigFunction; class SearchAndRenderBlockNodeTest extends TestCase { public function testCompileWidget() { - $arguments = new Node([ - new NameExpression('form', 0), - ]); + if (class_exists(Nodes::class)) { + $arguments = new Nodes([ + new NameExpression('form', 0), + ]); + } else { + $arguments = new Node([ + new NameExpression('form', 0), + ]); + } if (class_exists(FirstClassTwigCallableReady::class)) { $node = new SearchAndRenderBlockNode(new TwigFunction('form_widget'), $arguments, 0); @@ -52,13 +59,23 @@ public function testCompileWidget() public function testCompileWidgetWithVariables() { - $arguments = new Node([ - new NameExpression('form', 0), + if (class_exists(Nodes::class)) { + $arguments = new Nodes([ + new NameExpression('form', 0), new ArrayExpression([ new ConstantExpression('foo', 0), new ConstantExpression('bar', 0), - ], 0), - ]); + ], 0), + ]); + } else { + $arguments = new Node([ + new NameExpression('form', 0), + new ArrayExpression([ + new ConstantExpression('foo', 0), + new ConstantExpression('bar', 0), + ], 0), + ]); + } if (class_exists(FirstClassTwigCallableReady::class)) { $node = new SearchAndRenderBlockNode(new TwigFunction('form_widget'), $arguments, 0); @@ -79,10 +96,17 @@ public function testCompileWidgetWithVariables() public function testCompileLabelWithLabel() { - $arguments = new Node([ - new NameExpression('form', 0), - new ConstantExpression('my label', 0), - ]); + if (class_exists(Nodes::class)) { + $arguments = new Nodes([ + new NameExpression('form', 0), + new ConstantExpression('my label', 0), + ]); + } else { + $arguments = new Node([ + new NameExpression('form', 0), + new ConstantExpression('my label', 0), + ]); + } if (class_exists(FirstClassTwigCallableReady::class)) { $node = new SearchAndRenderBlockNode(new TwigFunction('form_label'), $arguments, 0); @@ -103,10 +127,17 @@ public function testCompileLabelWithLabel() public function testCompileLabelWithNullLabel() { - $arguments = new Node([ - new NameExpression('form', 0), - new ConstantExpression(null, 0), - ]); + if (class_exists(Nodes::class)) { + $arguments = new Nodes([ + new NameExpression('form', 0), + new ConstantExpression(null, 0), + ]); + } else { + $arguments = new Node([ + new NameExpression('form', 0), + new ConstantExpression(null, 0), + ]); + } if (class_exists(FirstClassTwigCallableReady::class)) { $node = new SearchAndRenderBlockNode(new TwigFunction('form_label'), $arguments, 0); @@ -129,10 +160,17 @@ public function testCompileLabelWithNullLabel() public function testCompileLabelWithEmptyStringLabel() { - $arguments = new Node([ - new NameExpression('form', 0), - new ConstantExpression('', 0), - ]); + if (class_exists(Nodes::class)) { + $arguments = new Nodes([ + new NameExpression('form', 0), + new ConstantExpression('', 0), + ]); + } else { + $arguments = new Node([ + new NameExpression('form', 0), + new ConstantExpression('', 0), + ]); + } if (class_exists(FirstClassTwigCallableReady::class)) { $node = new SearchAndRenderBlockNode(new TwigFunction('form_label'), $arguments, 0); @@ -155,9 +193,15 @@ public function testCompileLabelWithEmptyStringLabel() public function testCompileLabelWithDefaultLabel() { - $arguments = new Node([ - new NameExpression('form', 0), - ]); + if (class_exists(Nodes::class)) { + $arguments = new Nodes([ + new NameExpression('form', 0), + ]); + } else { + $arguments = new Node([ + new NameExpression('form', 0), + ]); + } if (class_exists(FirstClassTwigCallableReady::class)) { $node = new SearchAndRenderBlockNode(new TwigFunction('form_label'), $arguments, 0); @@ -178,14 +222,25 @@ public function testCompileLabelWithDefaultLabel() public function testCompileLabelWithAttributes() { - $arguments = new Node([ - new NameExpression('form', 0), - new ConstantExpression(null, 0), + if (class_exists(Nodes::class)) { + $arguments = new Nodes([ + new NameExpression('form', 0), + new ConstantExpression(null, 0), new ArrayExpression([ new ConstantExpression('foo', 0), new ConstantExpression('bar', 0), - ], 0), - ]); + ], 0), + ]); + } else { + $arguments = new Node([ + new NameExpression('form', 0), + new ConstantExpression(null, 0), + new ArrayExpression([ + new ConstantExpression('foo', 0), + new ConstantExpression('bar', 0), + ], 0), + ]); + } if (class_exists(FirstClassTwigCallableReady::class)) { $node = new SearchAndRenderBlockNode(new TwigFunction('form_label'), $arguments, 0); @@ -209,16 +264,29 @@ public function testCompileLabelWithAttributes() public function testCompileLabelWithLabelAndAttributes() { - $arguments = new Node([ - new NameExpression('form', 0), - new ConstantExpression('value in argument', 0), + if (class_exists(Nodes::class)) { + $arguments = new Nodes([ + new NameExpression('form', 0), + new ConstantExpression('value in argument', 0), new ArrayExpression([ new ConstantExpression('foo', 0), new ConstantExpression('bar', 0), new ConstantExpression('label', 0), new ConstantExpression('value in attributes', 0), - ], 0), - ]); + ], 0), + ]); + } else { + $arguments = new Node([ + new NameExpression('form', 0), + new ConstantExpression('value in argument', 0), + new ArrayExpression([ + new ConstantExpression('foo', 0), + new ConstantExpression('bar', 0), + new ConstantExpression('label', 0), + new ConstantExpression('value in attributes', 0), + ], 0), + ]); + } if (class_exists(FirstClassTwigCallableReady::class)) { $node = new SearchAndRenderBlockNode(new TwigFunction('form_label'), $arguments, 0); @@ -239,8 +307,9 @@ public function testCompileLabelWithLabelAndAttributes() public function testCompileLabelWithLabelThatEvaluatesToNull() { - $arguments = new Node([ - new NameExpression('form', 0), + if (class_exists(Nodes::class)) { + $arguments = new Nodes([ + new NameExpression('form', 0), new ConditionalExpression( // if new ConstantExpression(true, 0), @@ -249,8 +318,22 @@ public function testCompileLabelWithLabelThatEvaluatesToNull() // else new ConstantExpression(null, 0), 0 - ), - ]); + ), + ]); + } else { + $arguments = new Node([ + new NameExpression('form', 0), + new ConditionalExpression( + // if + new ConstantExpression(true, 0), + // then + new ConstantExpression(null, 0), + // else + new ConstantExpression(null, 0), + 0 + ), + ]); + } if (class_exists(FirstClassTwigCallableReady::class)) { $node = new SearchAndRenderBlockNode(new TwigFunction('form_label'), $arguments, 0); @@ -275,8 +358,9 @@ public function testCompileLabelWithLabelThatEvaluatesToNull() public function testCompileLabelWithLabelThatEvaluatesToNullAndAttributes() { - $arguments = new Node([ - new NameExpression('form', 0), + if (class_exists(Nodes::class)) { + $arguments = new Nodes([ + new NameExpression('form', 0), new ConditionalExpression( // if new ConstantExpression(true, 0), @@ -291,8 +375,25 @@ public function testCompileLabelWithLabelThatEvaluatesToNullAndAttributes() new ConstantExpression('bar', 0), new ConstantExpression('label', 0), new ConstantExpression('value in attributes', 0), - ], 0), - ]); + ], 0), + ]); + } else { + $arguments = new Node([ + new NameExpression('form', 0), + new ConditionalExpression( + new ConstantExpression(true, 0), + new ConstantExpression(null, 0), + new ConstantExpression(null, 0), + 0 + ), + new ArrayExpression([ + new ConstantExpression('foo', 0), + new ConstantExpression('bar', 0), + new ConstantExpression('label', 0), + new ConstantExpression('value in attributes', 0), + ], 0), + ]); + } if (class_exists(FirstClassTwigCallableReady::class)) { $node = new SearchAndRenderBlockNode(new TwigFunction('form_label'), $arguments, 0); diff --git a/src/Symfony/Bridge/Twig/Tests/NodeVisitor/TranslationNodeVisitorTest.php b/src/Symfony/Bridge/Twig/Tests/NodeVisitor/TranslationNodeVisitorTest.php index be26c9b425efc..96134b6ee8c37 100644 --- a/src/Symfony/Bridge/Twig/Tests/NodeVisitor/TranslationNodeVisitorTest.php +++ b/src/Symfony/Bridge/Twig/Tests/NodeVisitor/TranslationNodeVisitorTest.php @@ -21,8 +21,8 @@ use Twig\Node\Expression\FilterExpression; use Twig\Node\Expression\NameExpression; use Twig\Node\Node; +use Twig\Node\Nodes; use Twig\TwigFilter; -use Twig\TwigFunction; class TranslationNodeVisitorTest extends TestCase { @@ -41,24 +41,30 @@ public function testMessageExtractionWithInvalidDomainNode() { $message = 'new key'; + if (class_exists(Nodes::class)) { + $n = new Nodes([ + new ArrayExpression([], 0), + new NameExpression('variable', 0), + ]); + } else { + $n = new Node([ + new ArrayExpression([], 0), + new NameExpression('variable', 0), + ]); + } + if (class_exists(FirstClassTwigCallableReady::class)) { $node = new FilterExpression( new ConstantExpression($message, 0), new TwigFilter('trans'), - new Node([ - new ArrayExpression([], 0), - new NameExpression('variable', 0), - ]), + $n, 0 ); } else { $node = new FilterExpression( new ConstantExpression($message, 0), new ConstantExpression('trans', 0), - new Node([ - new ArrayExpression([], 0), - new NameExpression('variable', 0), - ]), + $n, 0 ); } diff --git a/src/Symfony/Bridge/Twig/Tests/NodeVisitor/TwigNodeProvider.php b/src/Symfony/Bridge/Twig/Tests/NodeVisitor/TwigNodeProvider.php index 7a79c34130016..69cf6beca0c44 100644 --- a/src/Symfony/Bridge/Twig/Tests/NodeVisitor/TwigNodeProvider.php +++ b/src/Symfony/Bridge/Twig/Tests/NodeVisitor/TwigNodeProvider.php @@ -20,6 +20,7 @@ use Twig\Node\Expression\FilterExpression; use Twig\Node\ModuleNode; use Twig\Node\Node; +use Twig\Node\Nodes; use Twig\Source; use Twig\TwigFilter; @@ -47,11 +48,17 @@ public static function getTransFilter($message, $domain = null, $arguments = nul ] : []; } + if (class_exists(Nodes::class)) { + $args = new Nodes($arguments); + } else { + $args = new Node($arguments); + } + if (!class_exists(FirstClassTwigCallableReady::class)) { return new FilterExpression( new ConstantExpression($message, 0), new ConstantExpression('trans', 0), - new Node($arguments), + $args, 0 ); } @@ -59,7 +66,7 @@ public static function getTransFilter($message, $domain = null, $arguments = nul return new FilterExpression( new ConstantExpression($message, 0), new TwigFilter('trans'), - new Node($arguments), + $args, 0 ); }