From c591bd291650ab22554ffd819e76d01a1a405719 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Sun, 3 Mar 2024 09:07:19 +0700 Subject: [PATCH] [CodeQuality] Skip nested array on InlineArrayReturnAssignRector (#5680) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add failing test for InlineArrayReturnAssignRector when using dynamic array definition * Test auto commit after update github actions (#5676) * Test auto commit after update github actions * [ci-review] Rector Rectify --------- Co-authored-by: GitHub Action * [CodeQuality] Skip nested array on InlineArrayReturnAssignRector * [ci-review] Rector Rectify --------- Co-authored-by: Kévin Grenier Co-authored-by: GitHub Action --- .../Fixture/skip_nested_array.php.inc | 15 +++++++++++++++ .../VariableDimFetchAssignResolver.php | 10 +++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 rules-tests/CodeQuality/Rector/ClassMethod/InlineArrayReturnAssignRector/Fixture/skip_nested_array.php.inc diff --git a/rules-tests/CodeQuality/Rector/ClassMethod/InlineArrayReturnAssignRector/Fixture/skip_nested_array.php.inc b/rules-tests/CodeQuality/Rector/ClassMethod/InlineArrayReturnAssignRector/Fixture/skip_nested_array.php.inc new file mode 100644 index 00000000000..53038cfb1e6 --- /dev/null +++ b/rules-tests/CodeQuality/Rector/ClassMethod/InlineArrayReturnAssignRector/Fixture/skip_nested_array.php.inc @@ -0,0 +1,15 @@ + 1, 'b' => 2]; + + return $arr; + } +} + diff --git a/rules/CodeQuality/NodeAnalyzer/VariableDimFetchAssignResolver.php b/rules/CodeQuality/NodeAnalyzer/VariableDimFetchAssignResolver.php index ae638f6d49b..4c9d9b2cb65 100644 --- a/rules/CodeQuality/NodeAnalyzer/VariableDimFetchAssignResolver.php +++ b/rules/CodeQuality/NodeAnalyzer/VariableDimFetchAssignResolver.php @@ -44,6 +44,10 @@ public function resolveFromStmtsAndVariable(array $stmts, Variable $variable): a $assign = $stmtExpr; $keyExpr = $this->matchKeyOnArrayDimFetchOfVariable($assign, $variable); + if ($keyExpr instanceof ArrayDimFetch) { + return []; + } + $keysAndExprs[] = new KeyAndExpr($keyExpr, $assign->expr, $stmt->getComments()); } @@ -63,7 +67,7 @@ private function matchKeyOnArrayDimFetchOfVariable(Assign $assign, Variable $var } $arrayDimFetch = $assign->var; - if (! $this->nodeComparator->areNodesEqual($arrayDimFetch->var, $variable)) { + if ($arrayDimFetch->var instanceof Variable && ! $this->nodeComparator->areNodesEqual($arrayDimFetch->var, $variable)) { return null; } @@ -76,6 +80,10 @@ private function matchKeyOnArrayDimFetchOfVariable(Assign $assign, Variable $var return null; } + if ($arrayDimFetch->var instanceof ArrayDimFetch) { + return $arrayDimFetch->var; + } + return $arrayDimFetch->dim; }