From 635647fa06da243e0a9c9c52d6824ea7e2b36b4d Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Thu, 22 Oct 2026 12:52:01 +0200 Subject: [PATCH] [Visibility] Deprecate ChangeConstantVisibilityRector as too niche and risky to visibility across parent --- .../ChangeConstantVisibilityRectorTest.php | 28 ------ .../Fixture/fixture.php.inc | 33 ------- .../Fixture/fixture2.php.inc | 21 ---- .../Source/ParentObject.php | 12 --- .../config/configured_rule.php | 23 ----- .../ChangeConstantVisibilityRector.php | 95 ++++--------------- .../ValueObject/ChangeConstantVisibility.php | 34 ------- 7 files changed, 16 insertions(+), 230 deletions(-) delete mode 100644 rules-tests/Visibility/Rector/ClassConst/ChangeConstantVisibilityRector/ChangeConstantVisibilityRectorTest.php delete mode 100644 rules-tests/Visibility/Rector/ClassConst/ChangeConstantVisibilityRector/Fixture/fixture.php.inc delete mode 100644 rules-tests/Visibility/Rector/ClassConst/ChangeConstantVisibilityRector/Fixture/fixture2.php.inc delete mode 100644 rules-tests/Visibility/Rector/ClassConst/ChangeConstantVisibilityRector/Source/ParentObject.php delete mode 100644 rules-tests/Visibility/Rector/ClassConst/ChangeConstantVisibilityRector/config/configured_rule.php delete mode 100644 rules/Visibility/ValueObject/ChangeConstantVisibility.php diff --git a/rules-tests/Visibility/Rector/ClassConst/ChangeConstantVisibilityRector/ChangeConstantVisibilityRectorTest.php b/rules-tests/Visibility/Rector/ClassConst/ChangeConstantVisibilityRector/ChangeConstantVisibilityRectorTest.php deleted file mode 100644 index 07572abc846..00000000000 --- a/rules-tests/Visibility/Rector/ClassConst/ChangeConstantVisibilityRector/ChangeConstantVisibilityRectorTest.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/Visibility/Rector/ClassConst/ChangeConstantVisibilityRector/Fixture/fixture.php.inc b/rules-tests/Visibility/Rector/ClassConst/ChangeConstantVisibilityRector/Fixture/fixture.php.inc deleted file mode 100644 index 4aa8e4a8955..00000000000 --- a/rules-tests/Visibility/Rector/ClassConst/ChangeConstantVisibilityRector/Fixture/fixture.php.inc +++ /dev/null @@ -1,33 +0,0 @@ - ------ - diff --git a/rules-tests/Visibility/Rector/ClassConst/ChangeConstantVisibilityRector/Fixture/fixture2.php.inc b/rules-tests/Visibility/Rector/ClassConst/ChangeConstantVisibilityRector/Fixture/fixture2.php.inc deleted file mode 100644 index 29f81d9e8cc..00000000000 --- a/rules-tests/Visibility/Rector/ClassConst/ChangeConstantVisibilityRector/Fixture/fixture2.php.inc +++ /dev/null @@ -1,21 +0,0 @@ - ------ - diff --git a/rules-tests/Visibility/Rector/ClassConst/ChangeConstantVisibilityRector/Source/ParentObject.php b/rules-tests/Visibility/Rector/ClassConst/ChangeConstantVisibilityRector/Source/ParentObject.php deleted file mode 100644 index e7644097e21..00000000000 --- a/rules-tests/Visibility/Rector/ClassConst/ChangeConstantVisibilityRector/Source/ParentObject.php +++ /dev/null @@ -1,12 +0,0 @@ -ruleWithConfiguration(ChangeConstantVisibilityRector::class, [ - new ChangeConstantVisibility(ParentObject::class, 'TO_BE_PUBLIC_CONSTANT', Visibility::PUBLIC), - new ChangeConstantVisibility(ParentObject::class, 'TO_BE_PROTECTED_CONSTANT', Visibility::PROTECTED), - new ChangeConstantVisibility(ParentObject::class, 'TO_BE_PRIVATE_CONSTANT', Visibility::PRIVATE), - new ChangeConstantVisibility( - 'Rector\Tests\Visibility\Rector\ClassConst\ChangeConstantVisibilityRector\Fixture\Fixture2', - 'TO_BE_PRIVATE_CONSTANT', - Visibility::PRIVATE - ), - ]); -}; diff --git a/rules/Visibility/Rector/ClassConst/ChangeConstantVisibilityRector.php b/rules/Visibility/Rector/ClassConst/ChangeConstantVisibilityRector.php index 05ed9f8dbae..806203da9c3 100644 --- a/rules/Visibility/Rector/ClassConst/ChangeConstantVisibilityRector.php +++ b/rules/Visibility/Rector/ClassConst/ChangeConstantVisibilityRector.php @@ -7,37 +7,22 @@ use PhpParser\Node; use PhpParser\Node\Stmt\Class_; use PhpParser\Node\Stmt\Interface_; -use Rector\Contract\Rector\ConfigurableRectorInterface; -use Rector\Privatization\NodeManipulator\VisibilityManipulator; +use Rector\Configuration\Deprecation\Contract\DeprecatedInterface; +use Rector\Exception\ShouldNotHappenException; use Rector\Rector\AbstractRector; -use Rector\RuleDoc\CodeSample\ConfiguredCodeSample; +use Rector\RuleDoc\CodeSample\CodeSample; use Rector\RuleDoc\RuleDefinition; -use Rector\ValueObject\Visibility; -use Rector\Visibility\ValueObject\ChangeConstantVisibility; -use Webmozart\Assert\Assert; /** - * @see \Rector\Tests\Visibility\Rector\ClassConst\ChangeConstantVisibilityRector\ChangeConstantVisibilityRectorTest + * @deprecated This rule is deprecated, as too niche and never used. Changing a constant visibility against its parent needs extra care to not break the code. Use a custom rule to handle your case instead. */ -final class ChangeConstantVisibilityRector extends AbstractRector implements ConfigurableRectorInterface +final class ChangeConstantVisibilityRector extends AbstractRector implements DeprecatedInterface { - /** - * @var ChangeConstantVisibility[] - */ - private array $classConstantVisibilityChanges = []; - - public function __construct( - private readonly VisibilityManipulator $visibilityManipulator, - ) { - } - public function getRuleDefinition(): RuleDefinition { - return new RuleDefinition( - 'Change visibility of constant from parent class', - [ - new ConfiguredCodeSample( - <<<'CODE_SAMPLE' + return new RuleDefinition('Change visibility of constant from parent class', [ + new CodeSample( + <<<'CODE_SAMPLE' class FrameworkClass { protected const SOME_CONSTANT = 1; @@ -48,8 +33,8 @@ class MyClass extends FrameworkClass public const SOME_CONSTANT = 1; } CODE_SAMPLE - , - <<<'CODE_SAMPLE' + , + <<<'CODE_SAMPLE' class FrameworkClass { protected const SOME_CONSTANT = 1; @@ -60,11 +45,8 @@ class MyClass extends FrameworkClass protected const SOME_CONSTANT = 1; } CODE_SAMPLE - , - [new ChangeConstantVisibility('ParentObject', 'SOME_CONSTANT', Visibility::PROTECTED)] - ), - ] - ); + ), + ]); } /** @@ -80,54 +62,9 @@ public function getNodeTypes(): array */ public function refactor(Node $node): ?Node { - $hasChanged = false; - - $constantNames = []; - foreach ($node->getConstants() as $classConst) { - if ($classConst->consts === []) { - continue; - } - - $constantNames[strtolower($classConst->consts[0]->name->toString())] = true; - } - - foreach ($this->classConstantVisibilityChanges as $classConstantVisibilityChange) { - // cheap name check before the expensive type resolution below - if (! isset($constantNames[strtolower($classConstantVisibilityChange->getConstant())])) { - continue; - } - - if (! $this->isObjectType($node, $classConstantVisibilityChange->getObjectType())) { - continue; - } - - foreach ($node->getConstants() as $classConst) { - if (! $this->isName($classConst, $classConstantVisibilityChange->getConstant())) { - continue; - } - - $this->visibilityManipulator->changeNodeVisibility( - $classConst, - $classConstantVisibilityChange->getVisibility() - ); - $hasChanged = true; - } - } - - if ($hasChanged) { - return $node; - } - - return null; - } - - /** - * @param mixed[] $configuration - */ - public function configure(array $configuration): void - { - Assert::allIsAOf($configuration, ChangeConstantVisibility::class); - - $this->classConstantVisibilityChanges = $configuration; + throw new ShouldNotHappenException(sprintf( + '"%s" rule is deprecated, as too niche and risky. Use a custom rule to handle your case instead', + self::class + )); } } diff --git a/rules/Visibility/ValueObject/ChangeConstantVisibility.php b/rules/Visibility/ValueObject/ChangeConstantVisibility.php deleted file mode 100644 index e503f509158..00000000000 --- a/rules/Visibility/ValueObject/ChangeConstantVisibility.php +++ /dev/null @@ -1,34 +0,0 @@ -class); - } - - public function getConstant(): string - { - return $this->constant; - } - - public function getVisibility(): int - { - return $this->visibility; - } -}