Skip to content

Commit 0594c13

Browse files
authored
[Naming] Handle rename with use after anonymous class on RenameParamToMatchTypeRector (#7984)
* [Naming] Handle rename with use after anonymous class on RenameParamToMatchTypeRector * Fix
1 parent 7805989 commit 0594c13

2 files changed

Lines changed: 67 additions & 0 deletions

File tree

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
<?php
2+
3+
namespace Rector\Tests\Naming\Rector\ClassMethod\RenameParamToMatchTypeRector\Fixture;
4+
5+
use PhpParser\Node\Stmt\ClassLike;
6+
7+
class WithUseAfterAnonymousClass
8+
{
9+
public function collectDependencies(ClassLike $node): array
10+
{
11+
$nodeTraverser = new NodeTraverser();
12+
$visitor = new class extends NodeVisitorAbstract {
13+
public array $names = [];
14+
15+
public function enterNode(Node $node): null
16+
{
17+
if ($node instanceof FullyQualified) {
18+
$this->names[] = implode('\\', $node->getParts());
19+
}
20+
21+
return null;
22+
}
23+
};
24+
25+
$nodeTraverser->addVisitor($visitor);
26+
$nodeTraverser->traverse([$node]);
27+
}
28+
}
29+
30+
?>
31+
-----
32+
<?php
33+
34+
namespace Rector\Tests\Naming\Rector\ClassMethod\RenameParamToMatchTypeRector\Fixture;
35+
36+
use PhpParser\Node\Stmt\ClassLike;
37+
38+
class WithUseAfterAnonymousClass
39+
{
40+
public function collectDependencies(ClassLike $classLike): array
41+
{
42+
$nodeTraverser = new NodeTraverser();
43+
$visitor = new class extends NodeVisitorAbstract {
44+
public array $names = [];
45+
46+
public function enterNode(Node $node): null
47+
{
48+
if ($node instanceof FullyQualified) {
49+
$this->names[] = implode('\\', $node->getParts());
50+
}
51+
52+
return null;
53+
}
54+
};
55+
56+
$nodeTraverser->addVisitor($visitor);
57+
$nodeTraverser->traverse([$classLike]);
58+
}
59+
}
60+
61+
?>

rules/Naming/VariableRenamer.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
use PhpParser\Node\FunctionLike;
1111
use PhpParser\Node\Param;
1212
use PhpParser\Node\Stmt;
13+
use PhpParser\Node\Stmt\Class_;
14+
use PhpParser\Node\Stmt\Function_;
1315
use PhpParser\NodeVisitor;
1416
use PHPStan\Analyser\MutatingScope;
1517
use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfo;
@@ -56,6 +58,10 @@ function (Node $node) use (
5658
&$currentStmt,
5759
&$currentFunctionLike
5860
): int|null|Variable {
61+
if ($node instanceof Class_ || $node instanceof Function_) {
62+
return NodeVisitor::DONT_TRAVERSE_CURRENT_AND_CHILDREN;
63+
}
64+
5965
// skip param names
6066
if ($node instanceof Param) {
6167
return NodeVisitor::DONT_TRAVERSE_CURRENT_AND_CHILDREN;

0 commit comments

Comments
 (0)