Skip to content

Commit cc7b747

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

File tree

3 files changed

+38
-26
lines changed

3 files changed

+38
-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: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,10 @@ public function refactor(Node $node): ?Node
120120
continue;
121121
}
122122

123+
if ($this->isUsedInClosure($node, $variableName)) {
124+
continue;
125+
}
126+
123127
// 1. remove initial assign
124128
$variablesToMethodCalls = [];
125129

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

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

0 commit comments

Comments
 (0)