From 0801531b5adebac3167acef1b07690e2cf14a20a Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Fri, 21 Nov 2025 01:25:12 +0000 Subject: [PATCH 1/3] cleanup immutable node traverser --- .../AbstractImmutableNodeTraverser.php | 33 +------------------ 1 file changed, 1 insertion(+), 32 deletions(-) diff --git a/src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php b/src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php index 0aeea1d7918..06f4ee11a6e 100644 --- a/src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php +++ b/src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php @@ -14,27 +14,7 @@ abstract class AbstractImmutableNodeTraverser implements NodeTraverserInterface { /** - * @deprecated Use NodeVisitor::DONT_TRAVERSE_CHILDREN instead. - */ - public const DONT_TRAVERSE_CHILDREN = NodeVisitor::DONT_TRAVERSE_CHILDREN; - - /** - * @deprecated Use NodeVisitor::STOP_TRAVERSAL instead. - */ - public const STOP_TRAVERSAL = NodeVisitor::STOP_TRAVERSAL; - - /** - * @deprecated Use NodeVisitor::REMOVE_NODE instead. - */ - public const REMOVE_NODE = NodeVisitor::REMOVE_NODE; - - /** - * @deprecated Use NodeVisitor::DONT_TRAVERSE_CURRENT_AND_CHILDREN instead. - */ - public const DONT_TRAVERSE_CURRENT_AND_CHILDREN = NodeVisitor::DONT_TRAVERSE_CURRENT_AND_CHILDREN; - - /** - * @var list Visitors + * @var list */ protected array $visitors = []; @@ -63,17 +43,6 @@ public function addVisitor(NodeVisitor $visitor): void $this->visitors[] = $visitor; } - /** - * Removes an added visitor. - */ - public function removeVisitor(NodeVisitor $visitor): void - { - $index = array_search($visitor, $this->visitors, true); - if ($index !== false) { - array_splice($this->visitors, $index, 1, []); - } - } - /** * Traverses an array of nodes using the registered visitors. * From f09147695c7ba6fe0808e2d7a9bcd2cdcd2a9828 Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Fri, 21 Nov 2025 01:26:19 +0000 Subject: [PATCH 2/3] privates first --- .../NodeTraverser/AbstractImmutableNodeTraverser.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php b/src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php index 06f4ee11a6e..e2375b20a31 100644 --- a/src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php +++ b/src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php @@ -21,7 +21,7 @@ abstract class AbstractImmutableNodeTraverser implements NodeTraverserInterface /** * @var bool Whether traversal should be stopped */ - protected bool $stopTraversal; + private bool $stopTraversal; /** * Create a traverser with the given visitors. @@ -80,7 +80,7 @@ abstract public function getVisitorsForNode(Node $node): array; * * @param Node $node Node to traverse. */ - protected function traverseNode(Node $node): void + private function traverseNode(Node $node): void { foreach ($node->getSubNodeNames() as $name) { $subNode = $node->{$name}; @@ -164,7 +164,7 @@ protected function traverseNode(Node $node): void * * @return array Result of traversal (may be original array or changed one) */ - protected function traverseArray(array $nodes): array + private function traverseArray(array $nodes): array { $doNodes = []; foreach ($nodes as $i => $node) { From 3fd742896cf52ad244bcf5da2eb841f4a0e05400 Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Fri, 21 Nov 2025 09:03:29 +0000 Subject: [PATCH 3/3] cs --- .../Fixture/skip_anonymous_class.php.inc | 3 +-- .../AbstractImmutableNodeTraverser.php | 25 +++++-------------- 2 files changed, 7 insertions(+), 21 deletions(-) diff --git a/rules-tests/CodeQuality/Rector/Class_/CompleteDynamicPropertiesRector/Fixture/skip_anonymous_class.php.inc b/rules-tests/CodeQuality/Rector/Class_/CompleteDynamicPropertiesRector/Fixture/skip_anonymous_class.php.inc index 76bab72d64a..0f0d7040f1e 100644 --- a/rules-tests/CodeQuality/Rector/Class_/CompleteDynamicPropertiesRector/Fixture/skip_anonymous_class.php.inc +++ b/rules-tests/CodeQuality/Rector/Class_/CompleteDynamicPropertiesRector/Fixture/skip_anonymous_class.php.inc @@ -18,8 +18,7 @@ class SkipAnonymousClass $nodes = $nodes ? [$nodes] : []; } - $nodeTraverser = new NodeTraverser(); - $nodeTraverser->addVisitor($this->createNodeVisitor($callable)); + $nodeTraverser = new NodeTraverser(...$this->createNodeVisitor($callable)); $nodeTraverser->traverse($nodes); } diff --git a/src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php b/src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php index e2375b20a31..cb35b3afa3f 100644 --- a/src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php +++ b/src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php @@ -18,31 +18,23 @@ abstract class AbstractImmutableNodeTraverser implements NodeTraverserInterface */ protected array $visitors = []; - /** - * @var bool Whether traversal should be stopped - */ private bool $stopTraversal; - /** - * Create a traverser with the given visitors. - * - * @param NodeVisitor ...$visitors Node visitors - */ public function __construct(NodeVisitor ...$visitors) { $this->visitors = $visitors; } - /** - * Adds a visitor. - * - * @param NodeVisitor $visitor Visitor to add - */ public function addVisitor(NodeVisitor $visitor): void { $this->visitors[] = $visitor; } + public function removeVisitor(NodeVisitor $visitor): void + { + throw new LogicException('Removing visitors is not supported in ' . static::class); + } + /** * Traverses an array of nodes using the registered visitors. * @@ -75,11 +67,6 @@ public function traverse(array $nodes): array */ abstract public function getVisitorsForNode(Node $node): array; - /** - * Recursively traverse a node. - * - * @param Node $node Node to traverse. - */ private function traverseNode(Node $node): void { foreach ($node->getSubNodeNames() as $name) { @@ -162,7 +149,7 @@ private function traverseNode(Node $node): void * * @param Node[] $nodes Array to traverse * - * @return array Result of traversal (may be original array or changed one) + * @return Node[] Result of traversal (may be original array or changed one) */ private function traverseArray(array $nodes): array {