Skip to content

Commit febd1cc

Browse files
authored
[CodingStyle] Skip by reference required params on call inside on ArrowFunctionDelegatingCallToFirstClassCallableRector (#7949)
* [CodingStyle] Skip by reference required params on call inside on ArrowFunctionDelegatingCallToFirstClassCallableRector * see * fix
1 parent ec38401 commit febd1cc

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?php
2+
3+
namespace Rector\Tests\CodingStyle\Rector\ArrowFunction\ArrowFunctionDelegatingCallToFirstClassCallableRector\Fixture;
4+
5+
/**
6+
* @see https://3v4l.org/T4rPe#v8.5.3
7+
*/
8+
final class SkipWithReset
9+
{
10+
public function run()
11+
{
12+
$data = [['a']];
13+
return array_map(fn ($item) => reset($item), $data);
14+
}
15+
}

rules/CodingStyle/Guard/ArrowFunctionAndClosureFirstClassCallableGuard.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
use PHPStan\Reflection\MethodReflection;
2222
use Rector\NodeNameResolver\NodeNameResolver;
2323
use Rector\NodeTypeResolver\Node\AttributeKey;
24+
use Rector\NodeTypeResolver\PHPStan\ParametersAcceptorSelectorVariantsWrapper;
2425
use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser;
2526
use Rector\PhpParser\AstResolver;
2627
use Rector\PhpParser\Comparing\NodeComparator;
@@ -102,6 +103,14 @@ public function shouldSkip(
102103
return true;
103104
}
104105

106+
// check if args require by reference
107+
$parameters = ParametersAcceptorSelectorVariantsWrapper::select($reflection, $callLike, $scope)->getParameters();
108+
foreach ($parameters as $parameter) {
109+
if ($parameter->passedByReference()->yes()) {
110+
return true;
111+
}
112+
}
113+
105114
$functionLike = $this->astResolver->resolveClassMethodOrFunctionFromCall($callLike);
106115
if (! $functionLike instanceof FunctionLike) {
107116
return false;

0 commit comments

Comments
 (0)