Skip to content

Commit e64ef14

Browse files
committed
Is used in closure
1 parent 65d406c commit e64ef14

File tree

3 files changed

+39
-26
lines changed

3 files changed

+39
-26
lines changed

rules-tests/CodeQuality/Rector/ClassMethod/BareCreateMockAssignToDirectUseRector/Fixture/multiple_uses_as_no_connection.php

Lines changed: 0 additions & 26 deletions
This file was deleted.
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?php
2+
3+
namespace Rector\PHPUnit\Tests\CodeQuality\Rector\ClassMethod\BareCreateMockAssignToDirectUseRector\Fixture;
4+
5+
use PHPUnit\Framework\TestCase;
6+
use Rector\PHPUnit\Tests\CodeQuality\Rector\ClassMethod\BareCreateMockAssignToDirectUseRector\Source\AnotherClass;
7+
8+
final class SkipIfUse extends TestCase
9+
{
10+
public function test()
11+
{
12+
$someMock = $this->createMock(AnotherClass::class);
13+
14+
$someClosure = function() use ($someMock) {
15+
// some logic here
16+
17+
return $someMock;
18+
};
19+
}
20+
}

rules/CodeQuality/Rector/ClassMethod/BareCreateMockAssignToDirectUseRector.php

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
use PhpParser\Node;
88
use PhpParser\Node\Arg;
9+
use PhpParser\Node\ClosureUse;
910
use PhpParser\Node\Expr\Assign;
1011
use PhpParser\Node\Expr\CallLike;
1112
use PhpParser\Node\Expr\MethodCall;
@@ -120,6 +121,10 @@ public function refactor(Node $node): ?Node
120121
continue;
121122
}
122123

124+
if ($this->isUsedInClosure($node, $variableName)) {
125+
continue;
126+
}
127+
123128
// 1. remove initial assign
124129
$variablesToMethodCalls = [];
125130

@@ -232,4 +237,18 @@ private function findCallLikes(ClassMethod|Foreach_|Stmt $node): array
232237

233238
return array_filter($callLikes, fn (CallLike $callLike): bool => ! $callLike->isFirstClassCallable());
234239
}
240+
241+
private function isUsedInClosure(ClassMethod|Foreach_ $stmtsAware, string $variableName): bool
242+
{
243+
/** @var Node\ClosureUse[] $uses */
244+
$uses = $this->betterNodeFinder->findInstancesOf([$stmtsAware], [ClosureUse::class]);
245+
246+
foreach ($uses as $use) {
247+
if ($this->isName($use->var, $variableName)) {
248+
return true;
249+
}
250+
}
251+
252+
return false;
253+
}
235254
}

0 commit comments

Comments
 (0)