diff --git a/rules-tests/DowngradePhp81/Rector/FuncCall/DowngradeHashAlgorithmXxHash/Fixture/skip_check_version_compare_ternary.php.inc b/rules-tests/DowngradePhp81/Rector/FuncCall/DowngradeHashAlgorithmXxHash/Fixture/skip_check_version_compare_ternary.php.inc new file mode 100644 index 00000000..3d665ea4 --- /dev/null +++ b/rules-tests/DowngradePhp81/Rector/FuncCall/DowngradeHashAlgorithmXxHash/Fixture/skip_check_version_compare_ternary.php.inc @@ -0,0 +1,13 @@ +=') + ? hash( 'xxh128', $value ) + : hash( 'md4', $value ); + } +} diff --git a/rules-tests/DowngradePhp81/Rector/FuncCall/DowngradeHashAlgorithmXxHash/Fixture/skip_check_version_compare_ternary2.php.inc b/rules-tests/DowngradePhp81/Rector/FuncCall/DowngradeHashAlgorithmXxHash/Fixture/skip_check_version_compare_ternary2.php.inc new file mode 100644 index 00000000..692024df --- /dev/null +++ b/rules-tests/DowngradePhp81/Rector/FuncCall/DowngradeHashAlgorithmXxHash/Fixture/skip_check_version_compare_ternary2.php.inc @@ -0,0 +1,13 @@ +isVersionCompareTernary($node)) { + return NodeVisitor::DONT_TRAVERSE_CHILDREN; + } + + return null; + } + if ($this->shouldSkip($node)) { return null; } @@ -104,6 +118,24 @@ public function refactor(Node $node): ?Node return $node; } + private function isVersionCompareTernary(Ternary $ternary): bool + { + if ($ternary->if instanceof Expr && $ternary->cond instanceof FuncCall) { + $versionCompare = $this->conditionResolver->resolveFromExpr($ternary->cond); + if ($versionCompare instanceof VersionCompareCondition && $versionCompare->getSecondVersion() === 80100) { + if ($versionCompare->getCompareSign() === '>=') { + return $ternary->if instanceof FuncCall && $this->isName($ternary->if, 'hash'); + } + + if ($versionCompare->getCompareSign() === '<') { + return $ternary->else instanceof FuncCall && $this->isName($ternary->else, 'hash'); + } + } + } + + return false; + } + private function shouldSkip(FuncCall $funcCall): bool { if ($funcCall->isFirstClassCallable()) {