From 99a85a7b5ec7683f28a1d3df384c8e8b24e1fda3 Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Tue, 22 Oct 2024 12:20:57 +0200 Subject: [PATCH] Remove deprecated/obsolete features --- src/Extension/CoreExtension.php | 21 -------- src/Node/Expression/MethodCallExpression.php | 54 -------------------- src/Node/Expression/Test/DefinedTest.php | 3 -- src/NodeVisitor/SafeAnalysisNodeVisitor.php | 3 +- src/Parser.php | 8 +-- 5 files changed, 2 insertions(+), 87 deletions(-) delete mode 100644 src/Node/Expression/MethodCallExpression.php diff --git a/src/Extension/CoreExtension.php b/src/Extension/CoreExtension.php index b7a51f403..5798280d4 100644 --- a/src/Extension/CoreExtension.php +++ b/src/Extension/CoreExtension.php @@ -1259,27 +1259,6 @@ final class CoreExtension extends AbstractExtension return mb_strtoupper(mb_substr($string ?? '', 0, 1, $charset), $charset).mb_strtolower(mb_substr($string ?? '', 1, null, $charset), $charset); } - /** - * @internal - * - * to be removed in 4.0 - */ - public static function callMacro(Template $template, string $method, array $args, int $lineno, array $context, Source $source) - { - if (!method_exists($template, $method)) { - $parent = $template; - while ($parent = $parent->getParent($context)) { - if (method_exists($parent, $method)) { - return $parent->$method(...$args); - } - } - - throw new RuntimeError(\sprintf('Macro "%s" is not defined in template "%s".', substr($method, \strlen('macro_')), $template->getTemplateName()), $lineno, $source); - } - - return $template->$method(...$args); - } - /** * @template TSequence * diff --git a/src/Node/Expression/MethodCallExpression.php b/src/Node/Expression/MethodCallExpression.php deleted file mode 100644 index 9aede826c..000000000 --- a/src/Node/Expression/MethodCallExpression.php +++ /dev/null @@ -1,54 +0,0 @@ - $node, 'arguments' => $arguments], ['method' => $method, 'safe' => false, 'is_defined_test' => false], $lineno); - - if ($node instanceof NameExpression) { - $node->setAttribute('always_defined', true); - } - } - - public function compile(Compiler $compiler): void - { - if ($this->getAttribute('is_defined_test')) { - $compiler - ->raw('method_exists($macros[') - ->repr($this->getNode('node')->getAttribute('name')) - ->raw('], ') - ->repr($this->getAttribute('method')) - ->raw(')') - ; - - return; - } - - $compiler - ->raw('CoreExtension::callMacro($macros[') - ->repr($this->getNode('node')->getAttribute('name')) - ->raw('], ') - ->repr($this->getAttribute('method')) - ->raw(', ') - ->subcompile($this->getNode('arguments')) - ->raw(', ') - ->repr($this->getTemplateLine()) - ->raw(', $context, $this->getSourceContext())'); - } -} diff --git a/src/Node/Expression/Test/DefinedTest.php b/src/Node/Expression/Test/DefinedTest.php index 3919346f6..b2559e6d1 100644 --- a/src/Node/Expression/Test/DefinedTest.php +++ b/src/Node/Expression/Test/DefinedTest.php @@ -21,7 +21,6 @@ use Twig\Node\Expression\ConstantExpression; use Twig\Node\Expression\FunctionExpression; use Twig\Node\Expression\GetAttrExpression; use Twig\Node\Expression\MacroReferenceExpression; -use Twig\Node\Expression\MethodCallExpression; use Twig\Node\Expression\NameExpression; use Twig\Node\Expression\TestExpression; use Twig\Node\Node; @@ -55,8 +54,6 @@ class DefinedTest extends TestExpression $node->setAttribute('is_defined_test', true); } elseif ($node instanceof ConstantExpression || $node instanceof ArrayExpression) { $node = new ConstantExpression(true, $node->getTemplateLine()); - } elseif ($node instanceof MethodCallExpression) { - $node->setAttribute('is_defined_test', true); } else { throw new SyntaxError('The "defined" test only works with simple variables.', $lineno); } diff --git a/src/NodeVisitor/SafeAnalysisNodeVisitor.php b/src/NodeVisitor/SafeAnalysisNodeVisitor.php index d394f2691..5793456b7 100644 --- a/src/NodeVisitor/SafeAnalysisNodeVisitor.php +++ b/src/NodeVisitor/SafeAnalysisNodeVisitor.php @@ -19,7 +19,6 @@ use Twig\Node\Expression\FilterExpression; use Twig\Node\Expression\FunctionExpression; use Twig\Node\Expression\GetAttrExpression; use Twig\Node\Expression\MacroReferenceExpression; -use Twig\Node\Expression\MethodCallExpression; use Twig\Node\Expression\NameExpression; use Twig\Node\Expression\ParentExpression; use Twig\Node\Node; @@ -113,7 +112,7 @@ final class SafeAnalysisNodeVisitor implements NodeVisitorInterface } else { $this->setSafe($node, []); } - } elseif ($node instanceof MethodCallExpression || $node instanceof MacroReferenceExpression) { + } elseif ($node instanceof MacroReferenceExpression) { // all macro calls are safe $this->setSafe($node, ['all']); } elseif ($node instanceof GetAttrExpression && $node->getNode('node') instanceof NameExpression) { diff --git a/src/Parser.php b/src/Parser.php index d370069ba..b6a3681ba 100644 --- a/src/Parser.php +++ b/src/Parser.php @@ -273,14 +273,8 @@ class Parser $this->embeddedTemplates[] = $template; } - public function addImportedSymbol(string $type, string $alias, ?string $name = null, AbstractExpression|string|null $internalRef = null): void + public function addImportedSymbol(string $type, string $alias, ?string $name = null, string|null $internalRef = null): void { - if ($internalRef instanceof AbstractExpression) { - trigger_deprecation('twig/twig', '3.15', 'Passing a non-string internal reference name to "%s" is deprecated ("%s" given).', __METHOD__, $internalRef::class); - - $internalRef = $internalRef->getAttribute('name'); - } - $this->importedSymbols[0][$type][$alias] = ['name' => $name, 'node' => $internalRef]; }