diff --git a/docs/AllRectorsOverview.md b/docs/AllRectorsOverview.md
index 83c57df79840..5f9bde6e36fd 100644
--- a/docs/AllRectorsOverview.md
+++ b/docs/AllRectorsOverview.md
@@ -1,4 +1,4 @@
-# All 477 Rectors Overview
+# All 481 Rectors Overview
- [Projects](#projects)
- [General](#general)
@@ -7854,6 +7854,14 @@ Remove php version checks if they are passed
## PostRector
+### `NameImportingRector`
+
+- class: [`Rector\PostRector\Rector\NameImportingRector`](/../master/packages/post-rector/src/Rector/NameImportingRector.php)
+
+Imports names
+
+
+
### `NodeRemovingRector`
- class: [`Rector\PostRector\Rector\NodeRemovingRector`](/../master/packages/post-rector/src/Rector/NodeRemovingRector.php)
@@ -7862,6 +7870,30 @@ PostRector that removes nodes
+### `NodeToReplacePostRector`
+
+- class: [`Rector\PostRector\Rector\NodeToReplacePostRector`](/../master/packages/post-rector/src/Rector/NodeToReplacePostRector.php)
+
+Post Rector that replaces one nodes with another
+
+
+
+### `PropertyAddingPostRector`
+
+- class: [`Rector\PostRector\Rector\PropertyAddingPostRector`](/../master/packages/post-rector/src/Rector/PropertyAddingPostRector.php)
+
+Post Rector that adds properties
+
+
+
+### `UseAddingPostRector`
+
+- class: [`Rector\PostRector\Rector\UseAddingPostRector`](/../master/packages/post-rector/src/Rector/UseAddingPostRector.php)
+
+Post Rector that adds use statements
+
+
+
## Privatization
### `PrivatizeLocalClassConstantRector`
diff --git a/packages/post-rector/src/Collector/NodesToReplaceCollector.php b/packages/post-rector/src/Collector/NodesToReplaceCollector.php
new file mode 100644
index 000000000000..e61f0f48793b
--- /dev/null
+++ b/packages/post-rector/src/Collector/NodesToReplaceCollector.php
@@ -0,0 +1,32 @@
+nodesToReplace[] = [$node, $replaceWith];
+ }
+
+ public function isActive(): bool
+ {
+ return count($this->nodesToReplace) > 0;
+ }
+
+ public function getNodes()
+ {
+ return $this->nodesToReplace;
+ }
+}
diff --git a/packages/post-rector/src/Rector/AbstractRector/NodeCommandersTrait.php b/packages/post-rector/src/Rector/AbstractRector/NodeCommandersTrait.php
index 8870f191cdc4..465812166ab7 100644
--- a/packages/post-rector/src/Rector/AbstractRector/NodeCommandersTrait.php
+++ b/packages/post-rector/src/Rector/AbstractRector/NodeCommandersTrait.php
@@ -13,10 +13,10 @@
use PHPStan\Type\Type;
use Rector\ChangesReporting\Collector\RectorChangeCollector;
use Rector\Core\PhpParser\Node\Commander\NodeAddingCommander;
-use Rector\Core\PhpParser\Node\Commander\NodeReplacingCommander;
use Rector\PHPStan\Type\AliasedObjectType;
use Rector\PHPStan\Type\FullyQualifiedObjectType;
use Rector\PostRector\Collector\NodesToRemoveCollector;
+use Rector\PostRector\Collector\NodesToReplaceCollector;
use Rector\PostRector\Collector\PropertyToAddCollector;
use Rector\PostRector\Collector\UseNodesToAddCollector;
@@ -47,9 +47,9 @@ trait NodeCommandersTrait
private $propertyToAddCollector;
/**
- * @var NodeReplacingCommander
+ * @var NodesToReplaceCollector
*/
- private $nodeReplacingCommander;
+ private $nodesToReplaceCollector;
/**
* @var RectorChangeCollector
@@ -64,14 +64,14 @@ public function autowireNodeCommandersTrait(
NodeAddingCommander $nodeAddingCommander,
PropertyToAddCollector $propertyToAddCollector,
UseNodesToAddCollector $useNodesToAddCollector,
- NodeReplacingCommander $nodeReplacingCommander,
+ NodesToReplaceCollector $nodesToReplaceCollector,
RectorChangeCollector $rectorChangeCollector
): void {
$this->nodesToRemoveCollector = $nodesToRemoveCollector;
$this->nodeAddingCommander = $nodeAddingCommander;
$this->propertyToAddCollector = $propertyToAddCollector;
$this->useNodesToAddCollector = $useNodesToAddCollector;
- $this->nodeReplacingCommander = $nodeReplacingCommander;
+ $this->nodesToReplaceCollector = $nodesToReplaceCollector;
$this->rectorChangeCollector = $rectorChangeCollector;
}
@@ -128,8 +128,7 @@ protected function removeNode(Node $node): void
protected function replaceNode(Node $node, Node $replaceWith): void
{
- $this->nodeReplacingCommander->replaceNode($node, $replaceWith);
-
+ $this->nodesToReplaceCollector->addReplaceNodeWithAnotherNode($node, $replaceWith);
$this->rectorChangeCollector->notifyNodeFileInfo($replaceWith);
}
diff --git a/packages/post-rector/src/Rector/NodeToReplacePostRector.php b/packages/post-rector/src/Rector/NodeToReplacePostRector.php
new file mode 100644
index 000000000000..e60a5c245e43
--- /dev/null
+++ b/packages/post-rector/src/Rector/NodeToReplacePostRector.php
@@ -0,0 +1,49 @@
+nodesToReplaceCollector = $nodesToReplaceCollector;
+ }
+
+ public function getPriority(): int
+ {
+ return 1100;
+ }
+
+ public function refactor(Node $node): ?Node
+ {
+ // used in leave node
+ return null;
+ // TODO: Implement refactor() method.
+ }
+
+ public function leaveNode(Node $node): ?Node
+ {
+ foreach ($this->nodesToReplaceCollector->getNodes() as [$nodeToFind, $replacement]) {
+ if ($node === $nodeToFind) {
+ return $replacement;
+ }
+ }
+ return null;
+ }
+
+ public function getDefinition(): RectorDefinition
+ {
+ return new RectorDefinition('Post Rector that replaces one nodes with another');
+ }
+}
diff --git a/src/PhpParser/Node/Commander/NodeReplacingCommander.php b/src/PhpParser/Node/Commander/NodeReplacingCommander.php
deleted file mode 100644
index 79c0c3c26f32..000000000000
--- a/src/PhpParser/Node/Commander/NodeReplacingCommander.php
+++ /dev/null
@@ -1,76 +0,0 @@
-nodesToReplace[] = [$node, $replaceWith];
- }
-
- /**
- * @param Node[] $nodes
- * @return Node[]
- */
- public function traverseNodes(array $nodes): array
- {
- $nodeTraverser = new NodeTraverser();
- $nodeTraverser->addVisitor($this->createNodeVisitor());
- return $nodeTraverser->traverse($nodes);
- }
-
- public function isActive(): bool
- {
- return count($this->nodesToReplace) > 0;
- }
-
- public function getPriority(): int
- {
- return 1100;
- }
-
- private function createNodeVisitor(): NodeVisitor
- {
- return new class($this->nodesToReplace) extends NodeVisitorAbstract {
- /**
- * @var Node[][]
- */
- private $nodesToReplace = [];
-
- /**
- * @param Node[][] $nodesToReplace
- */
- public function __construct(array $nodesToReplace)
- {
- $this->nodesToReplace = $nodesToReplace;
- }
-
- public function leaveNode(Node $node): ?Node
- {
- foreach ($this->nodesToReplace as [$nodeToFind, $replacement]) {
- if ($node === $nodeToFind) {
- return $replacement;
- }
- }
- return null;
- }
- };
- }
-}