mirror of
https://github.com/rectorphp/rector.git
synced 2024-07-01 07:03:32 +00:00
move node-replacing to PostRector
This commit is contained in:
parent
af3c92b3d5
commit
18feee456e
|
@ -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
|
||||
|
||||
<br>
|
||||
|
||||
### `NodeRemovingRector`
|
||||
|
||||
- class: [`Rector\PostRector\Rector\NodeRemovingRector`](/../master/packages/post-rector/src/Rector/NodeRemovingRector.php)
|
||||
|
@ -7862,6 +7870,30 @@ PostRector that removes nodes
|
|||
|
||||
<br>
|
||||
|
||||
### `NodeToReplacePostRector`
|
||||
|
||||
- class: [`Rector\PostRector\Rector\NodeToReplacePostRector`](/../master/packages/post-rector/src/Rector/NodeToReplacePostRector.php)
|
||||
|
||||
Post Rector that replaces one nodes with another
|
||||
|
||||
<br>
|
||||
|
||||
### `PropertyAddingPostRector`
|
||||
|
||||
- class: [`Rector\PostRector\Rector\PropertyAddingPostRector`](/../master/packages/post-rector/src/Rector/PropertyAddingPostRector.php)
|
||||
|
||||
Post Rector that adds properties
|
||||
|
||||
<br>
|
||||
|
||||
### `UseAddingPostRector`
|
||||
|
||||
- class: [`Rector\PostRector\Rector\UseAddingPostRector`](/../master/packages/post-rector/src/Rector/UseAddingPostRector.php)
|
||||
|
||||
Post Rector that adds use statements
|
||||
|
||||
<br>
|
||||
|
||||
## Privatization
|
||||
|
||||
### `PrivatizeLocalClassConstantRector`
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\PostRector\Collector;
|
||||
|
||||
use PhpParser\Node;
|
||||
use Rector\PostRector\Contract\Collector\NodeCollectorInterface;
|
||||
|
||||
final class NodesToReplaceCollector implements NodeCollectorInterface
|
||||
{
|
||||
/**
|
||||
* @todo use value object
|
||||
* @var Node[][]
|
||||
*/
|
||||
private $nodesToReplace = [];
|
||||
|
||||
public function addReplaceNodeWithAnotherNode(Node $node, Node $replaceWith): void
|
||||
{
|
||||
$this->nodesToReplace[] = [$node, $replaceWith];
|
||||
}
|
||||
|
||||
public function isActive(): bool
|
||||
{
|
||||
return count($this->nodesToReplace) > 0;
|
||||
}
|
||||
|
||||
public function getNodes()
|
||||
{
|
||||
return $this->nodesToReplace;
|
||||
}
|
||||
}
|
|
@ -13,10 +13,10 @@ use PHPStan\Type\ObjectType;
|
|||
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 @@ trait NodeCommandersTrait
|
|||
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 @@ trait NodeCommandersTrait
|
|||
|
||||
protected function replaceNode(Node $node, Node $replaceWith): void
|
||||
{
|
||||
$this->nodeReplacingCommander->replaceNode($node, $replaceWith);
|
||||
|
||||
$this->nodesToReplaceCollector->addReplaceNodeWithAnotherNode($node, $replaceWith);
|
||||
$this->rectorChangeCollector->notifyNodeFileInfo($replaceWith);
|
||||
}
|
||||
|
||||
|
|
49
packages/post-rector/src/Rector/NodeToReplacePostRector.php
Normal file
49
packages/post-rector/src/Rector/NodeToReplacePostRector.php
Normal file
|
@ -0,0 +1,49 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\PostRector\Rector;
|
||||
|
||||
use PhpParser\Node;
|
||||
use Rector\Core\RectorDefinition\RectorDefinition;
|
||||
use Rector\PostRector\Collector\NodesToReplaceCollector;
|
||||
|
||||
final class NodeToReplacePostRector extends AbstractPostRector
|
||||
{
|
||||
/**
|
||||
* @var NodesToReplaceCollector
|
||||
*/
|
||||
private $nodesToReplaceCollector;
|
||||
|
||||
public function __construct(NodesToReplaceCollector $nodesToReplaceCollector)
|
||||
{
|
||||
$this->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');
|
||||
}
|
||||
}
|
|
@ -1,76 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\Core\PhpParser\Node\Commander;
|
||||
|
||||
use PhpParser\Node;
|
||||
use PhpParser\NodeTraverser;
|
||||
use PhpParser\NodeVisitor;
|
||||
use PhpParser\NodeVisitorAbstract;
|
||||
use Rector\Core\Contract\PhpParser\Node\CommanderInterface;
|
||||
|
||||
/**
|
||||
* Adds new private properties to class + to constructor
|
||||
*/
|
||||
final class NodeReplacingCommander implements CommanderInterface
|
||||
{
|
||||
/**
|
||||
* @var Node[][]
|
||||
*/
|
||||
private $nodesToReplace = [];
|
||||
|
||||
public function replaceNode(Node $node, Node $replaceWith): void
|
||||
{
|
||||
$this->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;
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user