Skip to content

Commit e99ea33

Browse files
authored
skip internal or vendor class (#7626)
1 parent 86e4ac9 commit e99ea33

File tree

3 files changed

+41
-1
lines changed

3 files changed

+41
-1
lines changed
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<?php
2+
3+
namespace Rector\Tests\Unambiguous\Rector\Expression\FluentSettersToStandaloneCallMethodRector\Fixture;
4+
5+
use PHPUnit\Framework\TestCase;
6+
use Rector\Tests\Unambiguous\Rector\Expression\FluentSettersToStandaloneCallMethodRector\Source\SomeSetterClass;
7+
8+
final class SkipMocks extends TestCase
9+
{
10+
public function test()
11+
{
12+
$this->createMock(SomeSetterClass::class)
13+
->expects($this->once())
14+
->method('some');
15+
}
16+
}

rules-tests/Unambiguous/Rector/Expression/FluentSettersToStandaloneCallMethodRector/Source/SomeSetterClass.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
namespace Rector\Tests\Unambiguous\Rector\Expression\FluentSettersToStandaloneCallMethodRector\Source;
44

5-
final class SomeSetterClass
5+
class SomeSetterClass
66
{
77
private ?string $name = null;
88

rules/Unambiguous/Rector/Expression/FluentSettersToStandaloneCallMethodRector.php

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
namespace Rector\Unambiguous\Rector\Expression;
66

7+
use PHPStan\Type\ObjectType;
78
use PhpParser\Node;
89
use PhpParser\Node\Expr;
910
use PhpParser\Node\Expr\Assign;
@@ -13,6 +14,7 @@
1314
use PhpParser\Node\Name;
1415
use PhpParser\Node\Stmt\Expression;
1516
use PhpParser\Node\Stmt\Return_;
17+
use PHPStan\Reflection\ClassReflection;
1618
use Rector\Naming\Naming\PropertyNaming;
1719
use Rector\NodeTypeResolver\Node\AttributeKey;
1820
use Rector\Rector\AbstractRector;
@@ -107,6 +109,10 @@ public function refactor(Node $node): ?array
107109

108110
$rootExpr = $currentMethodCall;
109111

112+
if ($this->shouldSkipForVendorOrInternal($firstMethodCall)) {
113+
return null;
114+
}
115+
110116
$variableName = $this->resolveVariableName($rootExpr);
111117
$someVariable = new Variable($variableName);
112118

@@ -137,4 +143,22 @@ private function resolveVariableName(Expr $expr): string
137143

138144
return 'someVariable';
139145
}
146+
147+
private function shouldSkipForVendorOrInternal(MethodCall $firstMethodCall): bool
148+
{
149+
$callerType = $this->getType($firstMethodCall);
150+
if ($callerType instanceof ObjectType) {
151+
$classReflection = $callerType->getClassReflection();
152+
if (! $classReflection instanceof ClassReflection) {
153+
return false;
154+
}
155+
156+
$fileName = $classReflection->getFileName();
157+
if ($fileName === null || str_contains($fileName, 'vendor')) {
158+
return true;
159+
}
160+
}
161+
162+
return false;
163+
}
140164
}

0 commit comments

Comments
 (0)