8000 [Renaming] Allow rename method in trait itself on RenameMethodRector … · rectorphp/rector-src@c7278fa · GitHub
[go: up one dir, main page]

Skip to content

Commit c7278fa

Browse files
[Renaming] Allow rename method in trait itself on RenameMethodRector (#6942)
* [Renaming] Allow rename method in trait itself on RenameMethodRector * [ci-review] Rector Rectify --------- Co-authored-by: GitHub Action <actions@github.com>
1 parent 8874702 commit c7278fa

File tree

3 files changed

+38
-10
lines changed

3 files changed

+38
-10
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
3+
namespace Rector\Tests\Renaming\Rector\MethodCall\RenameMethodRector\Fixture;
4+
5+
trait RenameTraitMethod
6+
{
7+
private function run()
8+
{
9+
}
10+
}
11+
12+
?>
13+
-----
14+
<?php
15+
16+
namespace Rector\Tests\Renaming\Rector\MethodCall\RenameMethodRector\Fixture;
17+
18+
trait RenameTraitMethod
19+
{
20+
private function execute()
21+
{
22+
}
23+
}
24+
25+
?>

rules-tests/Renaming/Rector/MethodCall/RenameMethodRector/config/configured_rule.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use Rector\Renaming\Rector\MethodCall\RenameMethodRector;
77
use Rector\Renaming\ValueObject\MethodCallRename;
88
use Rector\Renaming\ValueObject\MethodCallRenameWithArrayKey;
9+
use Rector\Tests\Renaming\Rector\MethodCall\RenameMethodRector\Fixture\RenameTraitMethod;
910
use Rector\Tests\Renaming\Rector\MethodCall\RenameMethodRector\Source\AbstractType;
1011
use Rector\Tests\Renaming\Rector\MethodCall\RenameMethodRector\Source\CustomType;
1112
use Rector\Tests\Renaming\Rector\MethodCall\RenameMethodRector\Source\DifferentInterface;
@@ -37,5 +38,6 @@
3738

3839
new MethodCallRename(SomeEnumWithMethod::clas 10000 s, 'oldEnumMethod', 'newEnumMethod'),
3940
new MethodCallRename(SomeTrait::class, '_test', 'test'),
41+
new MethodCallRename(RenameTraitMethod::class, 'run', 'execute'),
4042
]);
4143
};

rules/Renaming/Rector/MethodCall/RenameMethodRector.php

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use PhpParser\Node\Stmt\Class_;
1515
use PhpParser\Node\Stmt\ClassMethod;
1616
use PhpParser\Node\Stmt\Interface_;
17+
use PhpParser\Node\Stmt\Trait_;
1718
use PHPStan\Analyser\Scope;
1819
use PHPStan\Reflection\ClassReflection;
1920
use PHPStan\Reflection\ReflectionProvider;
@@ -70,16 +71,16 @@ public function getRuleDefinition(): RuleDefinition
7071
*/
7172
public function getNodeTypes(): array
7273
{
73-
return [MethodCall::class, NullsafeMethodCall::class, StaticCall::class, Class_::class, Interface_::class];
74+
return [MethodCall::class, NullsafeMethodCall::class, StaticCall::class, Class_::class, Trait_::class, Interface_::class];
7475
}
7576

7677
/**
77-
* @param MethodCall|NullsafeMethodCall|StaticCall|Class_|Interface_ $node
78+
* @param MethodCall|NullsafeMethodCall|StaticCall|Class_|Interface_|Trait_ $node
7879
*/
7980
public function refactor(Node $node): ?Node
8081
{
8182
$scope = ScopeFetcher::fetch($node);
82-
if ($node instanceof Class_ || $node instanceof Interface_) {
83+
if ($node instanceof Class_ || $node instanceof Trait_ || $node instanceof Interface_) {
8384
return $this->refactorClass($node, $scope);
8485
}
8586

@@ -124,7 +125,7 @@ private function shouldSkipClassMethod(
124125
}
125126

126127
private function hasClassNewClassMethod(
127-
Class_|Interface_ $classOrInterface,
128+
Class_|Trait_|Interface_ $classOrInterface,
128129
MethodCallRenameInterface $methodCallRename
129130
): bool {
130131
return (bool) $classOrInterface->getMethod($methodCallRename->getNewMethod());
@@ -149,12 +150,8 @@ private function shouldKeepForParentInterface(
149150
);
150151
}
151152

152-
private function refactorClass(Class_|Interface_ $classOrInterface, Scope $scope): Class_|Interface_|null
153+
private function refactorClass(Class_|Trait_|Interface_ $classOrInterface, Scope $scope): Class_|Trait_|Interface_|null
153154
{
154-
if (! $scope->isInClass()) {
155-
return null;
156-
}
157-
158155
$classReflection = $scope->getClassReflection();
159156

160157
$hasChanged = false;
@@ -194,13 +191,17 @@ private function shouldSkipRename(
194191
string $methodName,
195192
ClassMethod $classMethod,
196193
MethodCallRenameInterface $methodCallRename,
197-
Class_|Interface_ $classOrInterface,
194+
Class_|Trait_|Interface_ $classOrInterface,
198195
?ClassReflection $classReflection
199196
): bool {
200197
if (! $this->nodeNameResolver->isStringName($methodName, $methodCallRename->getOldMethod())) {
201198
return true;
202199
}
203200

201+
if (!$classReflection instanceof ClassReflection && $classOrInterface instanceof Trait_) {
202+
return $this->hasClassNewClassMethod($classOrInterface, $methodCallRename);
203+
}
204+
204205
if (! $this->nodeTypeResolver->isMethodStaticCallOrClassMethodObjectType(
205206
$classMethod,
206207
$methodCallRename->getObjectType()

0 commit comments

Comments
 (0)
0