diff --git a/CHANGELOG b/CHANGELOG index dd75bcaab..7d722557a 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -218,6 +218,7 @@ * 1.40.0 (2019-XX-XX) + * allowed Twig\NodeVisitor\NodeVisitorInterface::leaveNode() to return "null" instead of "false" (same meaning) * added the "apply" tag as a replacement for the "filter" tag * allowed Twig\Loader\FilesystemLoader::findTemplate() to return "null" instead of "false" (same meaning) * added support for "Twig\Markup" instances in the "in" test diff --git a/src/NodeTraverser.php b/src/NodeTraverser.php index e48a7b0f2..3d1d74703 100644 --- a/src/NodeTraverser.php +++ b/src/NodeTraverser.php @@ -65,7 +65,7 @@ final class NodeTraverser $node = $visitor->enterNode($node, $this->env); foreach ($node as $k => $n) { - if (false !== $m = $this->traverseForVisitor($visitor, $n)) { + if (false !== ($m = $this->traverseForVisitor($visitor, $n)) && null !== $m) { if ($m !== $n) { $node->setNode($k, $m); } diff --git a/src/NodeVisitor/AbstractNodeVisitor.php b/src/NodeVisitor/AbstractNodeVisitor.php index c11933518..d1b0d1458 100644 --- a/src/NodeVisitor/AbstractNodeVisitor.php +++ b/src/NodeVisitor/AbstractNodeVisitor.php @@ -17,6 +17,8 @@ use Twig\Node\Node; /** * Used to make node visitors compatible with Twig 1.x and 2.x. * + * To be removed in Twig 3.1. + * * @author Fabien Potencier */ abstract class AbstractNodeVisitor implements NodeVisitorInterface @@ -41,7 +43,7 @@ abstract class AbstractNodeVisitor implements NodeVisitorInterface /** * Called after child nodes are visited. * - * @return Node|false The modified node or false if the node must be removed + * @return Node|false|null The modified node or null if the node must be removed */ abstract protected function doLeaveNode(Node $node, Environment $env); } diff --git a/src/NodeVisitor/NodeVisitorInterface.php b/src/NodeVisitor/NodeVisitorInterface.php index 1cd9269fd..9b10eb75f 100644 --- a/src/NodeVisitor/NodeVisitorInterface.php +++ b/src/NodeVisitor/NodeVisitorInterface.php @@ -31,7 +31,7 @@ interface NodeVisitorInterface /** * Called after child nodes are visited. * - * @return Node|false The modified node or false if the node must be removed + * @return Node|false|null The modified node or null if the node must be removed */ public function leaveNode(Node $node, Environment $env); diff --git a/src/TokenParser/AbstractTokenParser.php b/src/TokenParser/AbstractTokenParser.php index fc8c11a23..2c2f90b7f 100644 --- a/src/TokenParser/AbstractTokenParser.php +++ b/src/TokenParser/AbstractTokenParser.php @@ -20,6 +20,9 @@ use Twig\Parser; */ abstract class AbstractTokenParser implements TokenParserInterface { + /** + * @var Parser + */ protected $parser; public function setParser(Parser $parser)