diff --git a/config/set/php/php54.yaml b/config/set/php/php54.yaml index 5e2af80fb218..56b555c50c14 100644 --- a/config/set/php/php54.yaml +++ b/config/set/php/php54.yaml @@ -3,3 +3,4 @@ services: mysqli_param_count: 'mysqli_stmt_param_count' Rector\Php54\Rector\FuncCall\RemoveReferenceFromCallRector: ~ + Rector\Php54\Rector\Break_\RemoveZeroBreakContinueRector: ~ diff --git a/packages/Php54/src/Rector/Break_/RemoveZeroBreakContinueRector.php b/packages/Php54/src/Rector/Break_/RemoveZeroBreakContinueRector.php new file mode 100644 index 000000000000..6e89409c51f7 --- /dev/null +++ b/packages/Php54/src/Rector/Break_/RemoveZeroBreakContinueRector.php @@ -0,0 +1,129 @@ +num === null) { + return null; + } + + if ($node->num instanceof LNumber) { + $number = $this->getValue($node->num); + if ($number > 1) { + return null; + } + + if ($number === 0) { + $node->num = null; + return $node; + } + + return null; + } + + if ($node->num instanceof Variable) { + return $this->processVariableNum($node, $node->num); + } + + return null; + } + + /** + * @param Break_|Continue_ $node + */ + private function processVariableNum(Node $node, Variable $numVariable): ?Node + { + $staticType = $this->getStaticType($numVariable); + + if ($staticType instanceof ConstantType) { + if ($staticType instanceof ConstantIntegerType) { + if ($staticType->getValue() === 0) { + $node->num = null; + return $node; + } + + if ($staticType->getValue() > 0) { + $node->num = new LNumber($staticType->getValue()); + return $node; + } + } + + return $node; + } + + // remove variable + $node->num = null; + + return null; + } +} diff --git a/packages/Php54/tests/Rector/Break_/RemoveZeroBreakContinueRector/Fixture/fixture.php.inc b/packages/Php54/tests/Rector/Break_/RemoveZeroBreakContinueRector/Fixture/fixture.php.inc new file mode 100644 index 000000000000..8f2528ca020f --- /dev/null +++ b/packages/Php54/tests/Rector/Break_/RemoveZeroBreakContinueRector/Fixture/fixture.php.inc @@ -0,0 +1,33 @@ + +----- + diff --git a/packages/Php54/tests/Rector/Break_/RemoveZeroBreakContinueRector/RemoveZeroBreakContinueRectorTest.php b/packages/Php54/tests/Rector/Break_/RemoveZeroBreakContinueRector/RemoveZeroBreakContinueRectorTest.php new file mode 100644 index 000000000000..1d56cefca4f3 --- /dev/null +++ b/packages/Php54/tests/Rector/Break_/RemoveZeroBreakContinueRector/RemoveZeroBreakContinueRectorTest.php @@ -0,0 +1,31 @@ +doTestFileWithoutAutoload($file); + } + + /** + * @return string[] + */ + public function provideDataForTest(): iterable + { + yield [__DIR__ . '/Fixture/fixture.php.inc']; + } + + protected function getRectorClass(): string + { + return RemoveZeroBreakContinueRector::class; + } +}