From c74262e204f56ad77ce24e390576f9fc45f50fe5 Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Sat, 27 Jun 2026 19:36:34 +0200 Subject: [PATCH] [CodingStyle] Deprecate StaticClosureRector and StaticArrowFunctionRector as noisy, low-value changes --- composer.json | 3 +- .../Fixture/fixture.php.inc | 15 ------ .../Fixture/skip_already_static.php.inc | 5 -- ...ip_has_static_call_call_non_static.php.inc | 19 ------- .../Fixture/skip_with_this.php.inc | 13 ----- .../StaticArrowFunctionRectorTest.php | 28 ----------- .../config/configured_rule.php | 9 ---- .../Fixture/fixture.php.inc | 25 ---------- .../fixture_with_named_this_binding.php.inc | 41 --------------- .../Fixture/skip_already_static.php.inc | 11 ---- ...ip_has_static_call_call_non_static.php.inc | 19 ------- .../skip_use_with_context_binding.php.inc | 22 -------- .../Fixture/skip_with_this.php.inc | 19 ------- .../StaticClosureRector/Source/BindObject.php | 22 -------- .../StaticClosureRector/Source/functions.php | 14 ------ .../StaticClosureRectorTest.php | 28 ----------- .../config/configured_rule.php | 9 ---- rules/CodingStyle/Guard/StaticGuard.php | 50 ------------------- .../StaticArrowFunctionRector.php | 22 +++----- .../Rector/Closure/StaticClosureRector.php | 27 +++------- .../ClassMethod/NewInInitializerRector.php | 2 +- 21 files changed, 18 insertions(+), 385 deletions(-) delete mode 100644 rules-tests/CodingStyle/Rector/ArrowFunction/StaticArrowFunctionRector/Fixture/fixture.php.inc delete mode 100644 rules-tests/CodingStyle/Rector/ArrowFunction/StaticArrowFunctionRector/Fixture/skip_already_static.php.inc delete mode 100644 rules-tests/CodingStyle/Rector/ArrowFunction/StaticArrowFunctionRector/Fixture/skip_has_static_call_call_non_static.php.inc delete mode 100644 rules-tests/CodingStyle/Rector/ArrowFunction/StaticArrowFunctionRector/Fixture/skip_with_this.php.inc delete mode 100644 rules-tests/CodingStyle/Rector/ArrowFunction/StaticArrowFunctionRector/StaticArrowFunctionRectorTest.php delete mode 100644 rules-tests/CodingStyle/Rector/ArrowFunction/StaticArrowFunctionRector/config/configured_rule.php delete mode 100644 rules-tests/CodingStyle/Rector/Closure/StaticClosureRector/Fixture/fixture.php.inc delete mode 100644 rules-tests/CodingStyle/Rector/Closure/StaticClosureRector/Fixture/fixture_with_named_this_binding.php.inc delete mode 100644 rules-tests/CodingStyle/Rector/Closure/StaticClosureRector/Fixture/skip_already_static.php.inc delete mode 100644 rules-tests/CodingStyle/Rector/Closure/StaticClosureRector/Fixture/skip_has_static_call_call_non_static.php.inc delete mode 100644 rules-tests/CodingStyle/Rector/Closure/StaticClosureRector/Fixture/skip_use_with_context_binding.php.inc delete mode 100644 rules-tests/CodingStyle/Rector/Closure/StaticClosureRector/Fixture/skip_with_this.php.inc delete mode 100644 rules-tests/CodingStyle/Rector/Closure/StaticClosureRector/Source/BindObject.php delete mode 100644 rules-tests/CodingStyle/Rector/Closure/StaticClosureRector/Source/functions.php delete mode 100644 rules-tests/CodingStyle/Rector/Closure/StaticClosureRector/StaticClosureRectorTest.php delete mode 100644 rules-tests/CodingStyle/Rector/Closure/StaticClosureRector/config/configured_rule.php delete mode 100644 rules/CodingStyle/Guard/StaticGuard.php diff --git a/composer.json b/composer.json index b52664c23f8..3f843fbf07d 100644 --- a/composer.json +++ b/composer.json @@ -102,8 +102,7 @@ "rules-tests/Transform/Rector/FuncCall/FuncCallToMethodCallRector/Source/some_view_function.php", "rules-tests/TypeDeclaration/Rector/ClassMethod/ParamTypeByMethodCallTypeRector/Source/FunctionTyped.php", "rules-tests/TypeDeclaration/Rector/StmtsAwareInterface/SafeDeclareStrictTypesRector/Source/functions.php", - "rules-tests/Php70/Rector/ClassMethod/Php4ConstructorRector/Source/ParentClass.php", - "rules-tests/CodingStyle/Rector/Closure/StaticClosureRector/Source/functions.php" + "rules-tests/Php70/Rector/ClassMethod/Php4ConstructorRector/Source/ParentClass.php" ] }, "scripts": { diff --git a/rules-tests/CodingStyle/Rector/ArrowFunction/StaticArrowFunctionRector/Fixture/fixture.php.inc b/rules-tests/CodingStyle/Rector/ArrowFunction/StaticArrowFunctionRector/Fixture/fixture.php.inc deleted file mode 100644 index 6097c31174f..00000000000 --- a/rules-tests/CodingStyle/Rector/ArrowFunction/StaticArrowFunctionRector/Fixture/fixture.php.inc +++ /dev/null @@ -1,15 +0,0 @@ - 'test'; - -?> ------ - 'test'; - -?> diff --git a/rules-tests/CodingStyle/Rector/ArrowFunction/StaticArrowFunctionRector/Fixture/skip_already_static.php.inc b/rules-tests/CodingStyle/Rector/ArrowFunction/StaticArrowFunctionRector/Fixture/skip_already_static.php.inc deleted file mode 100644 index 4f2f327b9f7..00000000000 --- a/rules-tests/CodingStyle/Rector/ArrowFunction/StaticArrowFunctionRector/Fixture/skip_already_static.php.inc +++ /dev/null @@ -1,5 +0,0 @@ - 'test'; diff --git a/rules-tests/CodingStyle/Rector/ArrowFunction/StaticArrowFunctionRector/Fixture/skip_has_static_call_call_non_static.php.inc b/rules-tests/CodingStyle/Rector/ArrowFunction/StaticArrowFunctionRector/Fixture/skip_has_static_call_call_non_static.php.inc deleted file mode 100644 index 1d137c5a344..00000000000 --- a/rules-tests/CodingStyle/Rector/ArrowFunction/StaticArrowFunctionRector/Fixture/skip_has_static_call_call_non_static.php.inc +++ /dev/null @@ -1,19 +0,0 @@ - self::bar(); - } -} diff --git a/rules-tests/CodingStyle/Rector/ArrowFunction/StaticArrowFunctionRector/Fixture/skip_with_this.php.inc b/rules-tests/CodingStyle/Rector/ArrowFunction/StaticArrowFunctionRector/Fixture/skip_with_this.php.inc deleted file mode 100644 index 15acc6b456f..00000000000 --- a/rules-tests/CodingStyle/Rector/ArrowFunction/StaticArrowFunctionRector/Fixture/skip_with_this.php.inc +++ /dev/null @@ -1,13 +0,0 @@ - $this->data; - } -} diff --git a/rules-tests/CodingStyle/Rector/ArrowFunction/StaticArrowFunctionRector/StaticArrowFunctionRectorTest.php b/rules-tests/CodingStyle/Rector/ArrowFunction/StaticArrowFunctionRector/StaticArrowFunctionRectorTest.php deleted file mode 100644 index e6a755bb8cf..00000000000 --- a/rules-tests/CodingStyle/Rector/ArrowFunction/StaticArrowFunctionRector/StaticArrowFunctionRectorTest.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/CodingStyle/Rector/ArrowFunction/StaticArrowFunctionRector/config/configured_rule.php b/rules-tests/CodingStyle/Rector/ArrowFunction/StaticArrowFunctionRector/config/configured_rule.php deleted file mode 100644 index d37242748c0..00000000000 --- a/rules-tests/CodingStyle/Rector/ArrowFunction/StaticArrowFunctionRector/config/configured_rule.php +++ /dev/null @@ -1,9 +0,0 @@ -withRules([StaticArrowFunctionRector::class]); diff --git a/rules-tests/CodingStyle/Rector/Closure/StaticClosureRector/Fixture/fixture.php.inc b/rules-tests/CodingStyle/Rector/Closure/StaticClosureRector/Fixture/fixture.php.inc deleted file mode 100644 index de3d36c58b7..00000000000 --- a/rules-tests/CodingStyle/Rector/Closure/StaticClosureRector/Fixture/fixture.php.inc +++ /dev/null @@ -1,25 +0,0 @@ - ------ - diff --git a/rules-tests/CodingStyle/Rector/Closure/StaticClosureRector/Fixture/fixture_with_named_this_binding.php.inc b/rules-tests/CodingStyle/Rector/Closure/StaticClosureRector/Fixture/fixture_with_named_this_binding.php.inc deleted file mode 100644 index 3d35c44b0f3..00000000000 --- a/rules-tests/CodingStyle/Rector/Closure/StaticClosureRector/Fixture/fixture_with_named_this_binding.php.inc +++ /dev/null @@ -1,41 +0,0 @@ - ------ - diff --git a/rules-tests/CodingStyle/Rector/Closure/StaticClosureRector/Fixture/skip_already_static.php.inc b/rules-tests/CodingStyle/Rector/Closure/StaticClosureRector/Fixture/skip_already_static.php.inc deleted file mode 100644 index 3c0e340c3ce..00000000000 --- a/rules-tests/CodingStyle/Rector/Closure/StaticClosureRector/Fixture/skip_already_static.php.inc +++ /dev/null @@ -1,11 +0,0 @@ -callOnObject(function () { - echo 'method call'; -}); - -bind_on_object(function () { - echo 'closure func call 0'; -}, null, function () { - echo 'closure func call 0'; -}); - -?> diff --git a/rules-tests/CodingStyle/Rector/Closure/StaticClosureRector/Fixture/skip_with_this.php.inc b/rules-tests/CodingStyle/Rector/Closure/StaticClosureRector/Fixture/skip_with_this.php.inc deleted file mode 100644 index 56e15fda82c..00000000000 --- a/rules-tests/CodingStyle/Rector/Closure/StaticClosureRector/Fixture/skip_with_this.php.inc +++ /dev/null @@ -1,19 +0,0 @@ -data; - } - - return strtoupper($this->data); - }; - } -} diff --git a/rules-tests/CodingStyle/Rector/Closure/StaticClosureRector/Source/BindObject.php b/rules-tests/CodingStyle/Rector/Closure/StaticClosureRector/Source/BindObject.php deleted file mode 100644 index cd4881bf0ed..00000000000 --- a/rules-tests/CodingStyle/Rector/Closure/StaticClosureRector/Source/BindObject.php +++ /dev/null @@ -1,22 +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/CodingStyle/Rector/Closure/StaticClosureRector/config/configured_rule.php b/rules-tests/CodingStyle/Rector/Closure/StaticClosureRector/config/configured_rule.php deleted file mode 100644 index 7194947ac2e..00000000000 --- a/rules-tests/CodingStyle/Rector/Closure/StaticClosureRector/config/configured_rule.php +++ /dev/null @@ -1,9 +0,0 @@ -withRules([StaticClosureRector::class]); diff --git a/rules/CodingStyle/Guard/StaticGuard.php b/rules/CodingStyle/Guard/StaticGuard.php deleted file mode 100644 index 810d296053a..00000000000 --- a/rules/CodingStyle/Guard/StaticGuard.php +++ /dev/null @@ -1,50 +0,0 @@ -static) { - return false; - } - - $nodes = $node instanceof Closure - ? $node->stmts - : [$node->expr]; - - return ! (bool) $this->betterNodeFinder->findFirst( - $nodes, - function (Node $subNode): bool { - if (! $subNode instanceof StaticCall) { - return $subNode instanceof Variable && $subNode->name === 'this'; - } - - $methodReflection = $this->reflectionResolver->resolveMethodReflectionFromStaticCall($subNode); - if (! $methodReflection instanceof MethodReflection) { - return false; - } - - return ! $methodReflection->isStatic(); - } - ); - } -} diff --git a/rules/CodingStyle/Rector/ArrowFunction/StaticArrowFunctionRector.php b/rules/CodingStyle/Rector/ArrowFunction/StaticArrowFunctionRector.php index a1ea91399b7..2ddf9bbe9c2 100644 --- a/rules/CodingStyle/Rector/ArrowFunction/StaticArrowFunctionRector.php +++ b/rules/CodingStyle/Rector/ArrowFunction/StaticArrowFunctionRector.php @@ -6,21 +6,17 @@ use PhpParser\Node; use PhpParser\Node\Expr\ArrowFunction; -use Rector\CodingStyle\Guard\StaticGuard; +use Rector\Configuration\Deprecation\Contract\DeprecatedInterface; +use Rector\Exception\ShouldNotHappenException; use Rector\Rector\AbstractRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @see \Rector\Tests\CodingStyle\Rector\ArrowFunction\StaticArrowFunctionRector\StaticArrowFunctionRectorTest + * @deprecated as noisy change with little value. Use manually or custom rule where needed instead. */ -final class StaticArrowFunctionRector extends AbstractRector +final class StaticArrowFunctionRector extends AbstractRector implements DeprecatedInterface { - public function __construct( - private readonly StaticGuard $staticGuard - ) { - } - public function getRuleDefinition(): RuleDefinition { return new RuleDefinition( @@ -52,11 +48,9 @@ public function getNodeTypes(): array */ public function refactor(Node $node): ?Node { - if (! $this->staticGuard->isLegal($node)) { - return null; - } - - $node->static = true; - return $node; + throw new ShouldNotHappenException(sprintf( + '"%s" is deprecated as noisy change with little value. Use manually or custom rule where needed instead', + self::class + )); } } diff --git a/rules/CodingStyle/Rector/Closure/StaticClosureRector.php b/rules/CodingStyle/Rector/Closure/StaticClosureRector.php index 8d50fe1fec2..0993025632b 100644 --- a/rules/CodingStyle/Rector/Closure/StaticClosureRector.php +++ b/rules/CodingStyle/Rector/Closure/StaticClosureRector.php @@ -6,22 +6,17 @@ use PhpParser\Node; use PhpParser\Node\Expr\Closure; -use Rector\CodingStyle\Guard\StaticGuard; -use Rector\NodeTypeResolver\Node\AttributeKey; +use Rector\Configuration\Deprecation\Contract\DeprecatedInterface; +use Rector\Exception\ShouldNotHappenException; use Rector\Rector\AbstractRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @see \Rector\Tests\CodingStyle\Rector\Closure\StaticClosureRector\StaticClosureRectorTest + * @deprecated as noisy change with little value. Use manually or custom rule where needed instead. */ -final class StaticClosureRector extends AbstractRector +final class StaticClosureRector extends AbstractRector implements DeprecatedInterface { - public function __construct( - private readonly StaticGuard $staticGuard, - ) { - } - public function getRuleDefinition(): RuleDefinition { return new RuleDefinition( @@ -65,15 +60,9 @@ public function getNodeTypes(): array */ public function refactor(Node $node): ?Node { - if ($node->hasAttribute(AttributeKey::IS_CLOSURE_USES_THIS)) { - return null; - } - - if (! $this->staticGuard->isLegal($node)) { - return null; - } - - $node->static = true; - return $node; + throw new ShouldNotHappenException(sprintf( + '"%s" is deprecated as noisy change with little value. Use manually or custom rule where needed instead', + self::class + )); } } diff --git a/rules/Php81/Rector/ClassMethod/NewInInitializerRector.php b/rules/Php81/Rector/ClassMethod/NewInInitializerRector.php index 9f6b8ce280e..fe1e4178e7c 100644 --- a/rules/Php81/Rector/ClassMethod/NewInInitializerRector.php +++ b/rules/Php81/Rector/ClassMethod/NewInInitializerRector.php @@ -61,7 +61,7 @@ public function getNodeTypes(): array public function refactor(Node $node): ?Node { throw new ShouldNotHappenException(sprintf( - '"%s" is deprecated as depends on context. Cannot be automated. Use manually where needed instead', + '"%s" is deprecated as depends on context. Cannot be automated. Use manually or custom rule where needed instead', self::class )); }