class NodeTraverser
Same name in this branch
- 11.1.x vendor/phpstan/phpdoc-parser/src/Ast/NodeTraverser.php \PHPStan\PhpDocParser\Ast\NodeTraverser
- 11.1.x vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php \PhpParser\NodeTraverser
A node traverser.
It visits all nodes and their children and calls the given visitor for each.
@author Fabien Potencier <fabien@symfony.com>
Hierarchy
- class \Twig\NodeTraverser
Expanded class hierarchy of NodeTraverser
1 file declares its use of NodeTraverser
- EscaperNodeVisitor.php in vendor/
twig/ twig/ src/ NodeVisitor/ EscaperNodeVisitor.php
File
-
vendor/
twig/ twig/ src/ NodeTraverser.php, line 24
Namespace
TwigView source
final class NodeTraverser {
private $env;
private $visitors = [];
/**
* @param NodeVisitorInterface[] $visitors
*/
public function __construct(Environment $env, array $visitors = []) {
$this->env = $env;
foreach ($visitors as $visitor) {
$this->addVisitor($visitor);
}
}
public function addVisitor(NodeVisitorInterface $visitor) : void {
$this->visitors[$visitor->getPriority()][] = $visitor;
}
/**
* Traverses a node and calls the registered visitors.
*/
public function traverse(Node $node) : Node {
ksort($this->visitors);
foreach ($this->visitors as $visitors) {
foreach ($visitors as $visitor) {
$node = $this->traverseForVisitor($visitor, $node);
}
}
return $node;
}
private function traverseForVisitor(NodeVisitorInterface $visitor, Node $node) : ?Node {
$node = $visitor->enterNode($node, $this->env);
foreach ($node as $k => $n) {
if (null !== ($m = $this->traverseForVisitor($visitor, $n))) {
if ($m !== $n) {
$node->setNode($k, $m);
}
}
else {
$node->removeNode($k);
}
}
return $visitor->leaveNode($node, $this->env);
}
}
Members
Title Sort descending | Modifiers | Object type | Summary |
---|---|---|---|
NodeTraverser::$env | private | property | |
NodeTraverser::$visitors | private | property | |
NodeTraverser::addVisitor | public | function | |
NodeTraverser::traverse | public | function | Traverses a node and calls the registered visitors. |
NodeTraverser::traverseForVisitor | private | function | |
NodeTraverser::__construct | public | function |