Skip to content

Commit

Permalink
convert Enum::has to Enum::tryFrom() !== null
Browse files Browse the repository at this point in the history
  • Loading branch information
tomasJancar committed Oct 9, 2024
1 parent f97f519 commit 7650d7e
Show file tree
Hide file tree
Showing 2 changed files with 71 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
<?php
namespace BrandEmbassyCodingStandard\Rector\MabeEnumMethodCallToEnumConstRector\Fixture;

use BrandEmbassyCodingStandard\Rector\MabeEnumMethodCallToEnumConstRector\Source\SomeEnum;
use MabeEnum\Enum;

final class Enumerators {
public function run() {
SomeEnum::has('user');
}
}

class MyEnum extends Enum
{
const USER = 'user';

const UNSUPPORTED = 'unsupported';

public static function getOrUnsupported(string $enumerator): self
{
if (self::has($enumerator)) {
return self::get($enumerator);
}

return self::get(self::UNSUPPORTED);
}
}
?>
-----
<?php
namespace BrandEmbassyCodingStandard\Rector\MabeEnumMethodCallToEnumConstRector\Fixture;

use BrandEmbassyCodingStandard\Rector\MabeEnumMethodCallToEnumConstRector\Source\SomeEnum;
use MabeEnum\Enum;

final class Enumerators {
public function run() {
\BrandEmbassyCodingStandard\Rector\MabeEnumMethodCallToEnumConstRector\Source\SomeEnum::tryFrom('user') !== null;
}
}

class MyEnum extends Enum
{
const USER = 'user';

const UNSUPPORTED = 'unsupported';

public static function getOrUnsupported(string $enumerator): self
{
if (self::tryFrom($enumerator) !== null) {
return self::from($enumerator);
}

return self::UNSUPPORTED;
}
}
?>
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@
use PhpParser\Node\Expr;
use PhpParser\Node\Expr\Array_;
use PhpParser\Node\Expr\ArrayItem;
use PhpParser\Node\Expr\BinaryOp;
use PhpParser\Node\Expr\BinaryOp\Identical;
use PhpParser\Node\Expr\BinaryOp\NotIdentical;
use PhpParser\Node\Expr\ClassConstFetch;
use PhpParser\Node\Expr\MethodCall;
use PhpParser\Node\Expr\PropertyFetch;
Expand Down Expand Up @@ -149,6 +151,10 @@ private function refactorStaticCall(StaticCall $staticCall, string $staticCallNa
return $this->nodeFactory->createStaticCall($className, 'cases');
}

if ($staticCallName === 'has') {
return $this->refactorHasStaticCall($staticCall, $className);
}

return null;
}

Expand Down Expand Up @@ -185,6 +191,14 @@ private function refactorMethodCall(MethodCall $methodCall, string $methodName):
}


private function refactorHasStaticCall(StaticCall $staticCall, string $className): BinaryOp
{
$left = $this->nodeFactory->createStaticCall($className, 'tryFrom', $staticCall->getArgs());

return new NotIdentical($left, $this->nodeFactory->createNull());
}


private function refactorGetStaticCall(StaticCall $staticCall): ?Expr
{
$value = $staticCall->getArgs()[0]->value;
Expand Down

0 comments on commit 7650d7e

Please sign in to comment.