From 25da8c26dbc930a2ea27ca2552288c2ea8874ff7 Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Thu, 22 Oct 2026 21:59:28 +0200 Subject: [PATCH] [Removing] Deprecate RemoveTraitUseRector as niche, never used and needs context --- phpstan.neon | 1 - .../Fixture/fixture.php.inc | 24 ---------- .../RemoveTraitUseRectorTest.php | 28 ----------- .../Source/TraitToBeRemoved.php | 10 ---- .../config/configured_rule.php | 12 ----- .../Rector/Class_/RemoveTraitUseRector.php | 47 ++++--------------- 6 files changed, 8 insertions(+), 114 deletions(-) delete mode 100644 rules-tests/Removing/Rector/Class_/RemoveTraitUseRector/Fixture/fixture.php.inc delete mode 100644 rules-tests/Removing/Rector/Class_/RemoveTraitUseRector/RemoveTraitUseRectorTest.php delete mode 100644 rules-tests/Removing/Rector/Class_/RemoveTraitUseRector/Source/TraitToBeRemoved.php delete mode 100644 rules-tests/Removing/Rector/Class_/RemoveTraitUseRector/config/configured_rule.php diff --git a/phpstan.neon b/phpstan.neon index 1741ded25c4..1e5082b3d5a 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -236,7 +236,6 @@ parameters: identifier: rector.registerRector paths: - rules/Php81/Rector/FuncCall/NullToStrictStringFuncCallArgRector.php - - rules/Removing/Rector/Class_/RemoveTraitUseRector.php - rules/Transform/Rector/String_/StringToClassConstantRector.php # lack of generic array in nikic/php-parser diff --git a/rules-tests/Removing/Rector/Class_/RemoveTraitUseRector/Fixture/fixture.php.inc b/rules-tests/Removing/Rector/Class_/RemoveTraitUseRector/Fixture/fixture.php.inc deleted file mode 100644 index d83f48d205f..00000000000 --- a/rules-tests/Removing/Rector/Class_/RemoveTraitUseRector/Fixture/fixture.php.inc +++ /dev/null @@ -1,24 +0,0 @@ - ------ - diff --git a/rules-tests/Removing/Rector/Class_/RemoveTraitUseRector/RemoveTraitUseRectorTest.php b/rules-tests/Removing/Rector/Class_/RemoveTraitUseRector/RemoveTraitUseRectorTest.php deleted file mode 100644 index 20d2d1a02ce..00000000000 --- a/rules-tests/Removing/Rector/Class_/RemoveTraitUseRector/RemoveTraitUseRectorTest.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/Removing/Rector/Class_/RemoveTraitUseRector/Source/TraitToBeRemoved.php b/rules-tests/Removing/Rector/Class_/RemoveTraitUseRector/Source/TraitToBeRemoved.php deleted file mode 100644 index f1aedcb882b..00000000000 --- a/rules-tests/Removing/Rector/Class_/RemoveTraitUseRector/Source/TraitToBeRemoved.php +++ /dev/null @@ -1,10 +0,0 @@ -ruleWithConfiguration(RemoveTraitUseRector::class, [TraitToBeRemoved::class]); -}; diff --git a/rules/Removing/Rector/Class_/RemoveTraitUseRector.php b/rules/Removing/Rector/Class_/RemoveTraitUseRector.php index 3a2b9960ea9..bed1a6f8ac6 100644 --- a/rules/Removing/Rector/Class_/RemoveTraitUseRector.php +++ b/rules/Removing/Rector/Class_/RemoveTraitUseRector.php @@ -7,23 +7,18 @@ use PhpParser\Node; use PhpParser\Node\Stmt\Class_; use PhpParser\Node\Stmt\Trait_; -use PhpParser\Node\Stmt\TraitUse; +use Rector\Configuration\Deprecation\Contract\DeprecatedInterface; use Rector\Contract\Rector\ConfigurableRectorInterface; +use Rector\Exception\ShouldNotHappenException; use Rector\Rector\AbstractRector; use Rector\RuleDoc\CodeSample\ConfiguredCodeSample; use Rector\RuleDoc\RuleDefinition; -use Webmozart\Assert\Assert; /** - * @see \Rector\Tests\Removing\Rector\Class_\RemoveTraitUseRector\RemoveTraitUseRectorTest + * @deprecated This rule is deprecated, as too niche, never used and needs project context. Write a custom rule for the exact project case instead. */ -final class RemoveTraitUseRector extends AbstractRector implements ConfigurableRectorInterface +final class RemoveTraitUseRector extends AbstractRector implements ConfigurableRectorInterface, DeprecatedInterface { - /** - * @var string[] - */ - private array $traitsToRemove = []; - public function getRuleDefinition(): RuleDefinition { return new RuleDefinition('Remove specific traits from code', [ @@ -59,33 +54,10 @@ public function getNodeTypes(): array */ public function refactor(Node $node): ?Node { - $hasChanged = false; - - foreach ($node->stmts as $key => $stmt) { - if (! $stmt instanceof TraitUse) { - continue; - } - - foreach ($stmt->traits as $traitKey => $trait) { - if (! $this->isNames($trait, $this->traitsToRemove)) { - continue; - } - - unset($stmt->traits[$traitKey]); - $hasChanged = true; - } - - // remove empty trait uses - if ($stmt->traits === []) { - unset($node->stmts[$key]); - } - } - - if ($hasChanged) { - return $node; - } - - return null; + throw new ShouldNotHappenException(sprintf( + '"%s" rule is deprecated, as too niche and part of no set; write a custom rule for the exact project case instead', + self::class + )); } /** @@ -93,8 +65,5 @@ public function refactor(Node $node): ?Node */ public function configure(array $configuration): void { - Assert::allString($configuration); - - $this->traitsToRemove = $configuration; } }