From 60849004f9144a09ff4e7eb74f9a66888cb8ddb7 Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Sun, 11 Oct 2026 01:12:18 +0200 Subject: [PATCH] [CodeQuality] Deprecate CallUserFuncWithArrowFunctionToInlineRector as niche rule, not part of PHP upgrade path --- ...uncWithArrowFunctionToInlineRectorTest.php | 28 ---------- .../Fixture/simple_closure.php.inc | 29 ----------- .../Fixture/skip_no_return.php.inc | 13 ----- .../Fixture/some_class.php.inc | 27 ---------- .../config/configured_rule.php | 9 ---- ...serFuncWithArrowFunctionToInlineRector.php | 51 +++---------------- src/Config/Level/CodeQualityLevel.php | 2 - 7 files changed, 8 insertions(+), 151 deletions(-) delete mode 100644 rules-tests/CodeQuality/Rector/FuncCall/CallUserFuncWithArrowFunctionToInlineRector/CallUserFuncWithArrowFunctionToInlineRectorTest.php delete mode 100644 rules-tests/CodeQuality/Rector/FuncCall/CallUserFuncWithArrowFunctionToInlineRector/Fixture/simple_closure.php.inc delete mode 100644 rules-tests/CodeQuality/Rector/FuncCall/CallUserFuncWithArrowFunctionToInlineRector/Fixture/skip_no_return.php.inc delete mode 100644 rules-tests/CodeQuality/Rector/FuncCall/CallUserFuncWithArrowFunctionToInlineRector/Fixture/some_class.php.inc delete mode 100644 rules-tests/CodeQuality/Rector/FuncCall/CallUserFuncWithArrowFunctionToInlineRector/config/configured_rule.php diff --git a/rules-tests/CodeQuality/Rector/FuncCall/CallUserFuncWithArrowFunctionToInlineRector/CallUserFuncWithArrowFunctionToInlineRectorTest.php b/rules-tests/CodeQuality/Rector/FuncCall/CallUserFuncWithArrowFunctionToInlineRector/CallUserFuncWithArrowFunctionToInlineRectorTest.php deleted file mode 100644 index 436a55a7fbd..00000000000 --- a/rules-tests/CodeQuality/Rector/FuncCall/CallUserFuncWithArrowFunctionToInlineRector/CallUserFuncWithArrowFunctionToInlineRectorTest.php +++ /dev/null @@ -1,28 +0,0 @@ -doTestFile($filePath); - } - - public static function provideData(): Iterator - { - return self::yieldFilesFromDirectory(__DIR__ . '/Fixture'); - } - - public function provideConfigFilePath(): string - { - return __DIR__ . '/config/configured_rule.php'; - } -} diff --git a/rules-tests/CodeQuality/Rector/FuncCall/CallUserFuncWithArrowFunctionToInlineRector/Fixture/simple_closure.php.inc b/rules-tests/CodeQuality/Rector/FuncCall/CallUserFuncWithArrowFunctionToInlineRector/Fixture/simple_closure.php.inc deleted file mode 100644 index 3d27c83fd1e..00000000000 --- a/rules-tests/CodeQuality/Rector/FuncCall/CallUserFuncWithArrowFunctionToInlineRector/Fixture/simple_closure.php.inc +++ /dev/null @@ -1,29 +0,0 @@ - ------ - diff --git a/rules-tests/CodeQuality/Rector/FuncCall/CallUserFuncWithArrowFunctionToInlineRector/Fixture/skip_no_return.php.inc b/rules-tests/CodeQuality/Rector/FuncCall/CallUserFuncWithArrowFunctionToInlineRector/Fixture/skip_no_return.php.inc deleted file mode 100644 index d1ebf90ed5f..00000000000 --- a/rules-tests/CodeQuality/Rector/FuncCall/CallUserFuncWithArrowFunctionToInlineRector/Fixture/skip_no_return.php.inc +++ /dev/null @@ -1,13 +0,0 @@ - 100); - } -} - -?> ------ - diff --git a/rules-tests/CodeQuality/Rector/FuncCall/CallUserFuncWithArrowFunctionToInlineRector/config/configured_rule.php b/rules-tests/CodeQuality/Rector/FuncCall/CallUserFuncWithArrowFunctionToInlineRector/config/configured_rule.php deleted file mode 100644 index 437fbaf4e05..00000000000 --- a/rules-tests/CodeQuality/Rector/FuncCall/CallUserFuncWithArrowFunctionToInlineRector/config/configured_rule.php +++ /dev/null @@ -1,9 +0,0 @@ -withRules([CallUserFuncWithArrowFunctionToInlineRector::class]); diff --git a/rules/CodeQuality/Rector/FuncCall/CallUserFuncWithArrowFunctionToInlineRector.php b/rules/CodeQuality/Rector/FuncCall/CallUserFuncWithArrowFunctionToInlineRector.php index 1970f463552..2619f85a577 100644 --- a/rules/CodeQuality/Rector/FuncCall/CallUserFuncWithArrowFunctionToInlineRector.php +++ b/rules/CodeQuality/Rector/FuncCall/CallUserFuncWithArrowFunctionToInlineRector.php @@ -5,25 +5,18 @@ namespace Rector\CodeQuality\Rector\FuncCall; use PhpParser\Node; -use PhpParser\Node\Arg; -use PhpParser\Node\Expr\ArrowFunction; -use PhpParser\Node\Expr\Closure; use PhpParser\Node\Expr\FuncCall; -use Rector\Php74\NodeAnalyzer\ClosureArrowFunctionAnalyzer; +use Rector\Configuration\Deprecation\Contract\DeprecatedInterface; +use Rector\Exception\ShouldNotHappenException; use Rector\Rector\AbstractRector; use Rector\RuleDoc\CodeSample\CodeSample; use Rector\RuleDoc\RuleDefinition; /** - * @see \Rector\Tests\CodeQuality\Rector\FuncCall\CallUserFuncWithArrowFunctionToInlineRector\CallUserFuncWithArrowFunctionToInlineRectorTest + * @deprecated This rule is deprecated, as it handles a niche call_user_func() with arrow function case that is not part of the PHP upgrade path. */ -final class CallUserFuncWithArrowFunctionToInlineRector extends AbstractRector +final class CallUserFuncWithArrowFunctionToInlineRector extends AbstractRector implements DeprecatedInterface { - public function __construct( - private readonly ClosureArrowFunctionAnalyzer $closureArrowFunctionAnalyzer - ) { - } - public function getRuleDefinition(): RuleDefinition { return new RuleDefinition('Refactor `call_user_func()` with arrow function to direct call', [ @@ -65,37 +58,9 @@ public function getNodeTypes(): array */ public function refactor(Node $node): ?Node { - if ($node->isFirstClassCallable()) { - return null; - } - - if (! $this->isName($node, 'call_user_func')) { - return null; - } - - if (count($node->args) !== 1) { - return null; - } - - // change the node - if (! isset($node->getArgs()[0])) { - return null; - } - - $firstArg = $node->args[0]; - if (! $firstArg instanceof Arg) { - return null; - } - - $firstArgValue = $firstArg->value; - if ($firstArgValue instanceof ArrowFunction) { - return $firstArgValue->expr; - } - - if ($firstArgValue instanceof Closure) { - return $this->closureArrowFunctionAnalyzer->matchArrowFunctionExpr($firstArgValue); - } - - return null; + throw new ShouldNotHappenException(sprintf( + '"%s" rule is deprecated, as it handles a niche call_user_func() with arrow function case that is not part of the PHP upgrade path', + self::class + )); } } diff --git a/src/Config/Level/CodeQualityLevel.php b/src/Config/Level/CodeQualityLevel.php index 17026f84675..c71fcbe813c 100644 --- a/src/Config/Level/CodeQualityLevel.php +++ b/src/Config/Level/CodeQualityLevel.php @@ -34,7 +34,6 @@ use Rector\CodeQuality\Rector\Foreach_\ForeachToInArrayRector; use Rector\CodeQuality\Rector\Foreach_\SimplifyForeachToCoalescingRector; use Rector\CodeQuality\Rector\FuncCall\ArrayMergeOfNonArraysToSimpleArrayRector; -use Rector\CodeQuality\Rector\FuncCall\CallUserFuncWithArrowFunctionToInlineRector; use Rector\CodeQuality\Rector\FuncCall\ChangeArrayPushToArrayAssignRector; use Rector\CodeQuality\Rector\FuncCall\CompactToVariablesRector; use Rector\CodeQuality\Rector\FuncCall\InlineIsAInstanceOfRector; @@ -159,7 +158,6 @@ final class CodeQualityLevel TernaryFalseExpressionToIfRector::class, SwitchTrueToMatchRector::class, SimplifyIfNullableReturnRector::class, - CallUserFuncWithArrowFunctionToInlineRector::class, FlipTypeControlToUseExclusiveTypeRector::class, InlineArrayReturnAssignRector::class, RemoveAlwaysElseRector::class,