From 95090d048fb2d64ac7bb60c9d92111917af17f2f Mon Sep 17 00:00:00 2001 From: TomasVotruba Date: Mon, 30 Dec 2019 15:29:43 +0100 Subject: [PATCH] [CodeQuality] Fix identical boolcast --- .../Rector/If_/SimplifyIfReturnBoolRector.php | 20 ++++++++--- .../AbsolutizeRequireAndIncludePathRector.php | 15 ++++---- .../Fixture/identical_non_cast.php.inc | 35 +++++++++++++++++++ .../Node/Manipulator/IfManipulator.php | 6 +--- 4 files changed, 60 insertions(+), 16 deletions(-) create mode 100644 packages/CodeQuality/tests/Rector/If_/SimplifyIfReturnBoolRector/Fixture/identical_non_cast.php.inc diff --git a/packages/CodeQuality/src/Rector/If_/SimplifyIfReturnBoolRector.php b/packages/CodeQuality/src/Rector/If_/SimplifyIfReturnBoolRector.php index c93d7a44798a..c108cd2d7c7c 100644 --- a/packages/CodeQuality/src/Rector/If_/SimplifyIfReturnBoolRector.php +++ b/packages/CodeQuality/src/Rector/If_/SimplifyIfReturnBoolRector.php @@ -7,6 +7,7 @@ use Nette\Utils\Strings; use PhpParser\Node; use PhpParser\Node\Expr; +use PhpParser\Node\Expr\BinaryOp; use PhpParser\Node\Expr\BinaryOp\Identical; use PhpParser\Node\Expr\BinaryOp\NotIdentical; use PhpParser\Node\Expr\BooleanNot; @@ -189,11 +190,7 @@ private function boolCastOrNullCompareIfNeeded(Expr $expr): Expr } } - if ($expr instanceof BooleanNot) { - return $expr; - } - - if ($this->isStaticType($expr, BooleanType::class)) { + if (! $this->isBoolCastNeeded($expr)) { return $expr; } @@ -235,4 +232,17 @@ private function removeNullTypeFromUnionType(UnionType $unionType): Type return TypeFactoryStaticHelper::createUnionObjectType($unionedTypesWithoutNullType); } + + private function isBoolCastNeeded(Expr $expr): bool + { + if ($expr instanceof BooleanNot) { + return false; + } + + if ($this->isStaticType($expr, BooleanType::class)) { + return false; + } + + return ! $expr instanceof BinaryOp; + } } diff --git a/packages/CodeQuality/src/Rector/Include_/AbsolutizeRequireAndIncludePathRector.php b/packages/CodeQuality/src/Rector/Include_/AbsolutizeRequireAndIncludePathRector.php index 8b181df96fb4..5d92df3fffc4 100644 --- a/packages/CodeQuality/src/Rector/Include_/AbsolutizeRequireAndIncludePathRector.php +++ b/packages/CodeQuality/src/Rector/Include_/AbsolutizeRequireAndIncludePathRector.php @@ -23,9 +23,11 @@ final class AbsolutizeRequireAndIncludePathRector extends AbstractRector { public function getDefinition(): RectorDefinition { - return new RectorDefinition('include/require to absolute path. This Rector might introduce backwards incompatible code, when the include/require beeing changed depends on the current working directory.', [ - new CodeSample( - <<<'PHP' + return new RectorDefinition( + 'include/require to absolute path. This Rector might introduce backwards incompatible code, when the include/require beeing changed depends on the current working directory.', + [ + new CodeSample( + <<<'PHP' class SomeClass { public function run() @@ -37,7 +39,7 @@ public function run() } PHP , - <<<'PHP' + <<<'PHP' class SomeClass { public function run() @@ -49,8 +51,9 @@ public function run() } PHP - ), - ]); + ), + ] + ); } /** diff --git a/packages/CodeQuality/tests/Rector/If_/SimplifyIfReturnBoolRector/Fixture/identical_non_cast.php.inc b/packages/CodeQuality/tests/Rector/If_/SimplifyIfReturnBoolRector/Fixture/identical_non_cast.php.inc new file mode 100644 index 000000000000..e87831aa5e8b --- /dev/null +++ b/packages/CodeQuality/tests/Rector/If_/SimplifyIfReturnBoolRector/Fixture/identical_non_cast.php.inc @@ -0,0 +1,35 @@ +else === null) { + return false; + } + + return true; + } +} + +?> +----- +else !== null; + } +} + +?> diff --git a/src/PhpParser/Node/Manipulator/IfManipulator.php b/src/PhpParser/Node/Manipulator/IfManipulator.php index b807971835bb..3731da8c4df4 100644 --- a/src/PhpParser/Node/Manipulator/IfManipulator.php +++ b/src/PhpParser/Node/Manipulator/IfManipulator.php @@ -135,11 +135,7 @@ public function isEarlyElse(If_ $if): bool } } - if ($if->else === null) { - return false; - } - - return true; + return $if->else !== null; } private function matchComparedAndReturnedNode(NotIdentical $notIdentical, Return_ $returnNode): ?Expr