Skip to content

Commit

Permalink
[Php71] Set public constant on final constant on PublicConstantVisibi…
Browse files Browse the repository at this point in the history
…lityRector (#3431)

* Add failing test fixture for PublicConstantVisibilityRector

# Failing Test for PublicConstantVisibilityRector

Closes rectorphp/rector#7812

Based on https://getrector.com/demo/f14560bf-6f11-4e0d-a16a-8b793698049e

* Update rules-tests/Php71/Rector/ClassConst/PublicConstantVisibilityRector/Fixture/public_visibility_final_const.php.inc

Remove unrelated declaration

Co-authored-by: Abdul Malik Ikhsan <samsonasik@gmail.com>

* Update rules-tests/Php71/Rector/ClassConst/PublicConstantVisibilityRector/Fixture/public_visibility_final_const.php.inc

Remove unrelated declaration

Co-authored-by: Abdul Malik Ikhsan <samsonasik@gmail.com>

* once constant is ok

* Closes #3428 Fixes rectorphp/rector#7812

* clean up

* reuse duplicated code

* [ci-review] Rector Rectify

---------

Co-authored-by: Fabien LEGOUGE <fabien.legouge@gmail.com>
Co-authored-by: GitHub Action <actions@github.com>
  • Loading branch information
3 people committed Feb 28, 2023
1 parent 2eac878 commit 5e78981
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 27 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<?php

namespace Rector\Tests\Php71\Rector\ClassConst\PublicConstantVisibilityRector\Fixture;

class PublicVisibilityFinalConstant
{
final const EXIT_KO = 1;
}

?>
-----
<?php

namespace Rector\Tests\Php71\Rector\ClassConst\PublicConstantVisibilityRector\Fixture;

class PublicVisibilityFinalConstant
{
final public const EXIT_KO = 1;
}

?>
14 changes: 1 addition & 13 deletions rules/Php71/Rector/ClassConst/PublicConstantVisibilityRector.php
Original file line number Diff line number Diff line change
Expand Up @@ -62,19 +62,7 @@ public function getNodeTypes(): array
*/
public function refactor(Node $node): ?Node
{
// already non-public
if (! $node->isPublic()) {
return null;
}

// explicitly public
if ($node->flags !== 0) {
return null;
}

$this->visibilityManipulator->makePublic($node);

return $node;
return $this->visibilityManipulator->publicize($node);
}

public function provideMinPhpVersion(): int
Expand Down
16 changes: 16 additions & 0 deletions rules/Privatization/NodeManipulator/VisibilityManipulator.php
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,22 @@ public function removeReadonly(Class_ | Property | Param $node): void
$this->removeVisibilityFlag($node, Visibility::READONLY);
}

public function publicize(ClassConst|ClassMethod $node): ClassConst|ClassMethod|null
{
// already non-public
if (! $node->isPublic()) {
return null;
}

// explicitly public
if ($this->hasVisibility($node, Visibility::PUBLIC)) {
return null;
}

$this->makePublic($node);
return $node;
}

/**
* This way "abstract", "static", "final" are kept
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
use PhpParser\Node;
use PhpParser\Node\Stmt\ClassMethod;
use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\Visibility;
use Rector\Privatization\NodeManipulator\VisibilityManipulator;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
Expand Down Expand Up @@ -63,18 +62,6 @@ public function getNodeTypes(): array
*/
public function refactor(Node $node): ?Node
{
// already non-public
if (! $node->isPublic()) {
return null;
}

// explicitly public
if ($this->visibilityManipulator->hasVisibility($node, Visibility::PUBLIC)) {
return null;
}

$this->visibilityManipulator->makePublic($node);

return $node;
return $this->visibilityManipulator->publicize($node);
}
}

0 comments on commit 5e78981

Please sign in to comment.