1234567891011121314151617181920212223242526272829303132333435363738 |
- <?php declare(strict_types=1);
- namespace PhpParser\NodeVisitor;
- use PhpParser\Node;
- use PhpParser\NodeVisitorAbstract;
- use function array_pop;
- use function count;
- /**
- * Visitor that connects a child node to its parent node.
- *
- * On the child node, the parent node can be accessed through
- * <code>$node->getAttribute('parent')</code>.
- */
- final class ParentConnectingVisitor extends NodeVisitorAbstract {
- /**
- * @var Node[]
- */
- private array $stack = [];
- public function beforeTraverse(array $nodes) {
- $this->stack = [];
- }
- public function enterNode(Node $node) {
- if (!empty($this->stack)) {
- $node->setAttribute('parent', $this->stack[count($this->stack) - 1]);
- }
- $this->stack[] = $node;
- }
- public function leaveNode(Node $node) {
- array_pop($this->stack);
- }
- }
|