diff --git a/rules-tests/Transform/Rector/ArrayDimFetch/ArrayDimFetchToMethodCallRector/Fixture/skip_assign_ops.php.inc b/rules-tests/Transform/Rector/ArrayDimFetch/ArrayDimFetchToMethodCallRector/Fixture/skip_assign_ops.php.inc new file mode 100644 index 00000000000..4b87b69d094 --- /dev/null +++ b/rules-tests/Transform/Rector/ArrayDimFetch/ArrayDimFetchToMethodCallRector/Fixture/skip_assign_ops.php.inc @@ -0,0 +1,20 @@ +>= 42; +$object['key'] ??= 'value'; + +?> diff --git a/rules/Transform/Rector/ArrayDimFetch/ArrayDimFetchToMethodCallRector.php b/rules/Transform/Rector/ArrayDimFetch/ArrayDimFetchToMethodCallRector.php index ddbb4528ada..7c27c13c837 100644 --- a/rules/Transform/Rector/ArrayDimFetch/ArrayDimFetchToMethodCallRector.php +++ b/rules/Transform/Rector/ArrayDimFetch/ArrayDimFetchToMethodCallRector.php @@ -10,6 +10,7 @@ use PhpParser\Node\Expr; use PhpParser\Node\Expr\ArrayDimFetch; use PhpParser\Node\Expr\Assign; +use PhpParser\Node\Expr\AssignOp; use PhpParser\Node\Expr\BinaryOp\BooleanAnd; use PhpParser\Node\Expr\Isset_; use PhpParser\Node\Expr\MethodCall; @@ -59,7 +60,7 @@ public function getRuleDefinition(): RuleDefinition public function getNodeTypes(): array { - return [Assign::class, Isset_::class, Unset_::class, ArrayDimFetch::class]; + return [AssignOp::class, Assign::class, Isset_::class, Unset_::class, ArrayDimFetch::class]; } /** @@ -69,6 +70,10 @@ public function getNodeTypes(): array */ public function refactor(Node $node): array|Expr|null|int { + if ($node instanceof AssignOp) { + return NodeVisitor::DONT_TRAVERSE_CHILDREN; + } + if ($node instanceof Unset_) { return $this->handleUnset($node); }