Skip to content

Commit

Permalink
[Renaming][Performance] Re-structure check namespace only on renamed …
Browse files Browse the repository at this point in the history
…node got Namespace_ (#5265)

* [Renaming][Performance] Re-structure check namespace only on renamed node got Namespace_

* docblock
  • Loading branch information
samsonasik committed Nov 19, 2023
1 parent e43a1ce commit 13284c6
Showing 1 changed file with 32 additions and 9 deletions.
41 changes: 32 additions & 9 deletions rules/Renaming/Rector/Name/RenameClassRector.php
Expand Up @@ -28,12 +28,25 @@
*/
final class RenameClassRector extends AbstractRector implements ConfigurableRectorInterface
{
private bool $isMayRequireRestructureNamespace = false;

public function __construct(
private readonly RenamedClassesDataCollector $renamedClassesDataCollector,
private readonly ClassRenamer $classRenamer,
) {
}

/**
* @param Node[] $nodes
* @return Node[]|null
*/
public function beforeTraverse(array $nodes): ?array
{
$this->isMayRequireRestructureNamespace = false;

return parent::beforeTraverse($nodes);
}

public function getRuleDefinition(): RuleDefinition
{
return new RuleDefinition('Replaces defined classes by new ones.', [
Expand Down Expand Up @@ -95,7 +108,13 @@ public function refactor(Node $node): ?Node
$oldToNewClasses = $this->renamedClassesDataCollector->getOldToNewClasses();
if ($oldToNewClasses !== []) {
$scope = $node->getAttribute(AttributeKey::SCOPE);
return $this->classRenamer->renameNode($node, $oldToNewClasses, $scope);
$renameNode = $this->classRenamer->renameNode($node, $oldToNewClasses, $scope);

if ($renameNode instanceof Namespace_) {
$this->isMayRequireRestructureNamespace = true;
}

return $renameNode;
}

return null;
Expand All @@ -118,20 +137,24 @@ public function configure(array $configuration): void
*/
public function afterTraverse(array $nodes): ?array
{
if (! $this->isMayRequireRestructureNamespace) {
return parent::afterTraverse($nodes);
}

foreach ($nodes as $node) {
if ($node instanceof Namespace_) {
return parent::afterTraverse($nodes);
}

if ($node instanceof FileWithoutNamespace) {
foreach ($node->stmts as $stmt) {
if ($stmt instanceof Namespace_) {
$this->restructureUnderNamespace($node);
return $node->stmts;
}
}
if (! $node instanceof FileWithoutNamespace) {
continue;
}

return parent::afterTraverse($nodes);
foreach ($node->stmts as $stmt) {
if ($stmt instanceof Namespace_) {
$this->restructureUnderNamespace($node);
return $node->stmts;
}
}
}

Expand Down

0 comments on commit 13284c6

Please sign in to comment.