From 197528f45ccbaff02ff2738db9abf301197d3cf2 Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Wed, 5 Jun 2019 20:20:49 +0200 Subject: [PATCH] fixed macro auto-import when a template contains only macros --- CHANGELOG | 2 +- src/NodeVisitor/MacroAutoImportNodeVisitor.php | 6 +----- .../tags/macro/auto_import_without_blocks.test | 18 ++++++++++++++++++ 3 files changed, 20 insertions(+), 6 deletions(-) create mode 100644 test/Twig/Tests/Fixtures/tags/macro/auto_import_without_blocks.test diff --git a/CHANGELOG b/CHANGELOG index 60694f30c..0759f07d8 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,6 @@ * 2.11.3 (2019-XX-XX) - * n/a + * fixed macro auto-import when a template contains only macros * 2.11.2 (2019-06-05) diff --git a/src/NodeVisitor/MacroAutoImportNodeVisitor.php b/src/NodeVisitor/MacroAutoImportNodeVisitor.php index 684e73af4..f41d4637e 100644 --- a/src/NodeVisitor/MacroAutoImportNodeVisitor.php +++ b/src/NodeVisitor/MacroAutoImportNodeVisitor.php @@ -44,11 +44,7 @@ final class MacroAutoImportNodeVisitor implements NodeVisitorInterface if ($node instanceof ModuleNode) { $this->inAModule = false; if ($this->hasMacroCalls) { - $body = [new ImportNode(new NameExpression('_self', 0), new AssignNameExpression('_self', 0), 0, 'import', true)]; - foreach ($node->getNode('body') as $n) { - $body[] = $n; - } - $node->setNode('body', new Node($body)); + $node->getNode('constructor_end')->setNode('_auto_macro_import', new ImportNode(new NameExpression('_self', 0), new AssignNameExpression('_self', 0), 0, 'import', true)); } } elseif ($this->inAModule) { if ( diff --git a/test/Twig/Tests/Fixtures/tags/macro/auto_import_without_blocks.test b/test/Twig/Tests/Fixtures/tags/macro/auto_import_without_blocks.test new file mode 100644 index 000000000..79aec5cf1 --- /dev/null +++ b/test/Twig/Tests/Fixtures/tags/macro/auto_import_without_blocks.test @@ -0,0 +1,18 @@ +--TEST-- +"macro" tag +--TEMPLATE-- +{% import 'macros' as macro %} +{{ macro.foo() }} +--TEMPLATE(macros)-- +{% macro foo() %} + foo + {{- _self.bar() }} +{% endmacro %} + +{% macro bar() -%} + bar +{% endmacro %} +--DATA-- +return [] +--EXPECT-- +foobar