diff --git a/rules-tests/CodingStyle/Rector/ArrowFunction/ArrowFunctionDelegatingCallToFirstClassCallableRector/Fixture/skip_with_reset.php.inc b/rules-tests/CodingStyle/Rector/ArrowFunction/ArrowFunctionDelegatingCallToFirstClassCallableRector/Fixture/skip_with_reset.php.inc new file mode 100644 index 00000000000..0a027137fe2 --- /dev/null +++ b/rules-tests/CodingStyle/Rector/ArrowFunction/ArrowFunctionDelegatingCallToFirstClassCallableRector/Fixture/skip_with_reset.php.inc @@ -0,0 +1,15 @@ + reset($item), $data); + } +} diff --git a/rules/CodingStyle/Guard/ArrowFunctionAndClosureFirstClassCallableGuard.php b/rules/CodingStyle/Guard/ArrowFunctionAndClosureFirstClassCallableGuard.php index 6882cb68ec2..0e4f94fe216 100644 --- a/rules/CodingStyle/Guard/ArrowFunctionAndClosureFirstClassCallableGuard.php +++ b/rules/CodingStyle/Guard/ArrowFunctionAndClosureFirstClassCallableGuard.php @@ -21,6 +21,7 @@ use PHPStan\Reflection\MethodReflection; use Rector\NodeNameResolver\NodeNameResolver; use Rector\NodeTypeResolver\Node\AttributeKey; +use Rector\NodeTypeResolver\PHPStan\ParametersAcceptorSelectorVariantsWrapper; use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; use Rector\PhpParser\AstResolver; use Rector\PhpParser\Comparing\NodeComparator; @@ -102,6 +103,14 @@ public function shouldSkip( return true; } + // check if args require by reference + $parameters = ParametersAcceptorSelectorVariantsWrapper::select($reflection, $callLike, $scope)->getParameters(); + foreach ($parameters as $parameter) { + if ($parameter->passedByReference()->yes()) { + return true; + } + } + $functionLike = $this->astResolver->resolveClassMethodOrFunctionFromCall($callLike); if (! $functionLike instanceof FunctionLike) { return false;