Skip to content

Commit 97f380a

Browse files
committed
make RectorNodeTraverser immutable
1 parent d544ea3 commit 97f380a

4 files changed

Lines changed: 13 additions & 248 deletions

File tree

phpstan.neon

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ includes:
55
parameters:
66
level: 8
77

8-
reportUnmatchedIgnoredErrors: false
8+
# reportUnmatchedIgnoredErrors: false
9+
910
errorFormat: symplify
1011

1112
# see https://phpstan.org/writing-php-code/phpdoc-types#global-type-aliases
@@ -385,15 +386,8 @@ parameters:
385386
path: src/PhpParser/NodeTraverser/RectorNodeTraverser.php
386387
-
387388
identifier: offsetAccess.nonArray
388-
<<<<<<< HEAD
389-
path: src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php
390-
391-
=======
392389
path: src/PhpParser/NodeTraverser/RectorNodeTraverser.php
393-
-
394-
message: '#Property PhpParser\\Node\\Stmt\\ClassMethod\:\:\$stmts \(array<PhpParser\\Node\\Stmt>\|null\) does not accept array<PhpParser\\Node>#'
395-
path: scripts/create-immutable-node-visitor.php
396-
>>>>>>> bb4e608ca7 ([int] merge AbstractImmutableNodeTraverser and RectorNodeTraverser as sole child and tight design)
390+
397391
-
398392
message: '#Property Rector\\PhpParser\\NodeTraverser\\AbstractImmutableNodeTraverser\:\:\$visitors \(list<PhpParser\\NodeVisitor>\) does not accept array<int\|string, PhpParser\\NodeVisitor>#'
399393
path: src/PhpParser/NodeTraverser/RectorNodeTraverser.php

src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php

Lines changed: 0 additions & 236 deletions
This file was deleted.

src/PhpParser/NodeTraverser/RectorNodeTraverser.php

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,11 +93,14 @@ public function getVisitorsForNode(Node $node): array
9393
{
9494
$nodeClass = $node::class;
9595

96+
if (! $this->areNodeVisitorsPrepared) {
97+
$this->prepareNodeVisitors();
98+
}
99+
96100
if (! isset($this->visitorsPerNodeClass[$nodeClass])) {
97101
$this->visitorsPerNodeClass[$nodeClass] = [];
98102

99-
/** @var RectorInterface $visitor */
100-
foreach ($this->visitors as $visitor) {
103+
foreach ($this->rectors as $visitor) {
101104
foreach ($visitor->getNodeTypes() as $nodeType) {
102105
// BC layer matching
103106
if ($nodeType === FileWithoutNamespace::class && $nodeClass === FileNode::class) {
@@ -116,6 +119,7 @@ public function getVisitorsForNode(Node $node): array
116119
return $this->visitorsPerNodeClass[$nodeClass];
117120
}
118121

122+
<<<<<<< HEAD
119123
/**
120124
// * Create a traverser with the given visitors.
121125
// *
@@ -131,9 +135,11 @@ public function getVisitorsForNode(Node $node): array
131135
*
132136
* @deprecated @todo remove completely, even in tests to avoid mutable state
133137
*/
138+
=======
139+
>>>>>>> 1dc39d6761 (make RectorNodeTraverser immutable)
134140
public function addVisitor(NodeVisitor $visitor): void
135141
{
136-
$this->visitors[] = $visitor;
142+
throw new ShouldNotHappenException('The immutable node traverser does not support adding visitors.');
137143
}
138144

139145
public function removeVisitor(NodeVisitor $visitor): void

tests/PhpParser/NodeTraverser/RectorNodeTraverserTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ public function testGetVisitorsForNodeWhenNoVisitorsMatch(): void
5858
public function testGetVisitorsForNodeWhenSomeVisitorsMatch(): void
5959
{
6060
$class = new Class_('test');
61+
6162
$this->rectorNodeTraverser->refreshPhpRectors([
6263
$this->ruleUsingFunctionRector,
6364
$this->ruleUsingClassRector,

0 commit comments

Comments
 (0)