From 5f28681b9fc572394e690426f07f62fb5b812c47 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Sun, 15 Aug 2021 20:46:35 +0700 Subject: [PATCH] [DeadCode] Skip UnwrapFutureCompatibleIfPhpVersionRector on higher than current php provider (#685) --- .../Fixture/skip_higher_current.php.inc | 18 ++++++++++++++++++ rules/DeadCode/ConditionEvaluator.php | 11 ++++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 rules-tests/DeadCode/Rector/If_/UnwrapFutureCompatibleIfPhpVersionRector/Fixture/skip_higher_current.php.inc diff --git a/rules-tests/DeadCode/Rector/If_/UnwrapFutureCompatibleIfPhpVersionRector/Fixture/skip_higher_current.php.inc b/rules-tests/DeadCode/Rector/If_/UnwrapFutureCompatibleIfPhpVersionRector/Fixture/skip_higher_current.php.inc new file mode 100644 index 00000000000..c3233442194 --- /dev/null +++ b/rules-tests/DeadCode/Rector/If_/UnwrapFutureCompatibleIfPhpVersionRector/Fixture/skip_higher_current.php.inc @@ -0,0 +1,18 @@ +phpVersionProvider->provide() returns 10000 on test + if (version_compare(PHP_VERSION, '11.0', '<')) { + return 'a'; + } else { + return 'b'; + } + } +} + +?> diff --git a/rules/DeadCode/ConditionEvaluator.php b/rules/DeadCode/ConditionEvaluator.php index 5503b4410bc..34fc6918790 100644 --- a/rules/DeadCode/ConditionEvaluator.php +++ b/rules/DeadCode/ConditionEvaluator.php @@ -9,12 +9,17 @@ use PhpParser\Node\Expr\BinaryOp\NotEqual; use PhpParser\Node\Expr\BinaryOp\NotIdentical; use Rector\Core\Exception\ShouldNotHappenException; +use Rector\Core\Php\PhpVersionProvider; use Rector\DeadCode\Contract\ConditionInterface; use Rector\DeadCode\ValueObject\BinaryToVersionCompareCondition; use Rector\DeadCode\ValueObject\VersionCompareCondition; final class ConditionEvaluator { + public function __construct(private PhpVersionProvider $phpVersionProvider) + { + } + /** * @return bool|int|null */ @@ -31,10 +36,14 @@ public function evaluate(ConditionInterface $condition) return null; } - private function evaluateVersionCompareCondition(VersionCompareCondition $versionCompareCondition): bool | int + private function evaluateVersionCompareCondition(VersionCompareCondition $versionCompareCondition): bool | int | null { $compareSign = $versionCompareCondition->getCompareSign(); if ($compareSign !== null) { + if ($compareSign === '<' && $this->phpVersionProvider->provide() < $versionCompareCondition->getSecondVersion()) { + return null; + } + return version_compare( (string) $versionCompareCondition->getFirstVersion(), (string) $versionCompareCondition->getSecondVersion(),