diff --git a/rules-tests/DeadCode/Rector/Plus/RemoveDeadZeroAndOneOperationRector/Fixture/multiply_function_call.php.inc b/rules-tests/DeadCode/Rector/Plus/RemoveDeadZeroAndOneOperationRector/Fixture/multiply_function_call.php.inc new file mode 100644 index 00000000000..9756a8a7367 --- /dev/null +++ b/rules-tests/DeadCode/Rector/Plus/RemoveDeadZeroAndOneOperationRector/Fixture/multiply_function_call.php.inc @@ -0,0 +1,27 @@ + +----- + diff --git a/rules-tests/DeadCode/Rector/Plus/RemoveDeadZeroAndOneOperationRector/Fixture/with_parentheses.php.inc b/rules-tests/DeadCode/Rector/Plus/RemoveDeadZeroAndOneOperationRector/Fixture/with_parentheses.php.inc index 1a2fc7268c4..1198a8601ae 100644 --- a/rules-tests/DeadCode/Rector/Plus/RemoveDeadZeroAndOneOperationRector/Fixture/with_parentheses.php.inc +++ b/rules-tests/DeadCode/Rector/Plus/RemoveDeadZeroAndOneOperationRector/Fixture/with_parentheses.php.inc @@ -7,6 +7,7 @@ class WithParentheses public function run() { $a = 1 * (2 + 3) * 4; + $a = 1 * ( 2 + 3 ) * 4; } } @@ -21,6 +22,7 @@ class WithParentheses public function run() { $a = (2 + 3) * 4; + $a = (2 + 3) * 4; } } diff --git a/rules/DeadCode/Rector/Plus/RemoveDeadZeroAndOneOperationRector.php b/rules/DeadCode/Rector/Plus/RemoveDeadZeroAndOneOperationRector.php index de8f0d0f620..9eb19cb0087 100644 --- a/rules/DeadCode/Rector/Plus/RemoveDeadZeroAndOneOperationRector.php +++ b/rules/DeadCode/Rector/Plus/RemoveDeadZeroAndOneOperationRector.php @@ -176,10 +176,36 @@ private function processBinaryPlusAndMinus(Plus | Minus $binaryOp): ?Expr private function isMulParenthesized(File $file, Mul $mul): bool { + if (! $mul->right instanceof BinaryOp) { + return false; + } + $oldTokens = $file->getOldTokens(); $endTokenPost = $mul->getEndTokenPos(); - return isset($oldTokens[$endTokenPost]) && (string) $oldTokens[$endTokenPost] === ')'; + if (isset($oldTokens[$endTokenPost]) && (string) $oldTokens[$endTokenPost] === ')') { + $startTokenPos = $mul->right->getStartTokenPos(); + $previousEndTokenPost = $mul->left->getEndTokenPos(); + + while ($startTokenPos > $previousEndTokenPost) { + --$startTokenPos; + + if (! isset($oldTokens[$startTokenPos])) { + return false; + } + + // handle space before open parentheses + if (trim((string) $oldTokens[$startTokenPos]) === '') { + continue; + } + + return (string) $oldTokens[$startTokenPos] === '('; + } + + return false; + } + + return false; } private function processBinaryMulAndDiv(Mul | Div $binaryOp): ?Expr