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; - } - }; - } -}