From d3256736141b57c6540733d8ea90bfe79c0db1c1 Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Thu, 18 Jun 2026 21:54:53 +0200 Subject: [PATCH] [code-quality] Add NewArrayItemConcatAssignToAssignRector --- .../Fixture/new_array_item.php.inc | 27 +++++++++ .../Fixture/skip_existing_key.php.inc | 11 ++++ ...rrayItemConcatAssignToAssignRectorTest.php | 28 +++++++++ .../config/configured_rule.php | 9 +++ ...NewArrayItemConcatAssignToAssignRector.php | 58 +++++++++++++++++++ src/Config/Level/CodeQualityLevel.php | 2 + 6 files changed, 135 insertions(+) create mode 100644 rules-tests/CodeQuality/Rector/AssignOp/NewArrayItemConcatAssignToAssignRector/Fixture/new_array_item.php.inc create mode 100644 rules-tests/CodeQuality/Rector/AssignOp/NewArrayItemConcatAssignToAssignRector/Fixture/skip_existing_key.php.inc create mode 100644 rules-tests/CodeQuality/Rector/AssignOp/NewArrayItemConcatAssignToAssignRector/NewArrayItemConcatAssignToAssignRectorTest.php create mode 100644 rules-tests/CodeQuality/Rector/AssignOp/NewArrayItemConcatAssignToAssignRector/config/configured_rule.php create mode 100644 rules/CodeQuality/Rector/AssignOp/NewArrayItemConcatAssignToAssignRector.php diff --git a/rules-tests/CodeQuality/Rector/AssignOp/NewArrayItemConcatAssignToAssignRector/Fixture/new_array_item.php.inc b/rules-tests/CodeQuality/Rector/AssignOp/NewArrayItemConcatAssignToAssignRector/Fixture/new_array_item.php.inc new file mode 100644 index 00000000000..69c5a108099 --- /dev/null +++ b/rules-tests/CodeQuality/Rector/AssignOp/NewArrayItemConcatAssignToAssignRector/Fixture/new_array_item.php.inc @@ -0,0 +1,27 @@ + +----- + diff --git a/rules-tests/CodeQuality/Rector/AssignOp/NewArrayItemConcatAssignToAssignRector/Fixture/skip_existing_key.php.inc b/rules-tests/CodeQuality/Rector/AssignOp/NewArrayItemConcatAssignToAssignRector/Fixture/skip_existing_key.php.inc new file mode 100644 index 00000000000..ad30582bb68 --- /dev/null +++ b/rules-tests/CodeQuality/Rector/AssignOp/NewArrayItemConcatAssignToAssignRector/Fixture/skip_existing_key.php.inc @@ -0,0 +1,11 @@ +doTestFile($filePath); + } + + public static function provideData(): Iterator + { + return self::yieldFilesFromDirectory(__DIR__ . '/Fixture'); + } + + public function provideConfigFilePath(): string + { + return __DIR__ . '/config/configured_rule.php'; + } +} diff --git a/rules-tests/CodeQuality/Rector/AssignOp/NewArrayItemConcatAssignToAssignRector/config/configured_rule.php b/rules-tests/CodeQuality/Rector/AssignOp/NewArrayItemConcatAssignToAssignRector/config/configured_rule.php new file mode 100644 index 00000000000..5524454a535 --- /dev/null +++ b/rules-tests/CodeQuality/Rector/AssignOp/NewArrayItemConcatAssignToAssignRector/config/configured_rule.php @@ -0,0 +1,9 @@ +withRules([NewArrayItemConcatAssignToAssignRector::class]); diff --git a/rules/CodeQuality/Rector/AssignOp/NewArrayItemConcatAssignToAssignRector.php b/rules/CodeQuality/Rector/AssignOp/NewArrayItemConcatAssignToAssignRector.php new file mode 100644 index 00000000000..d992b2246d8 --- /dev/null +++ b/rules/CodeQuality/Rector/AssignOp/NewArrayItemConcatAssignToAssignRector.php @@ -0,0 +1,58 @@ +var instanceof ArrayDimFetch) { + return null; + } + + if ($node->var->dim instanceof Node) { + return null; + } + + return new Assign($node->var, $node->expr); + } +} diff --git a/src/Config/Level/CodeQualityLevel.php b/src/Config/Level/CodeQualityLevel.php index a813ecd9e8a..7454fd142b7 100644 --- a/src/Config/Level/CodeQualityLevel.php +++ b/src/Config/Level/CodeQualityLevel.php @@ -5,6 +5,7 @@ namespace Rector\Config\Level; use Rector\CodeQuality\Rector\Assign\CombinedAssignRector; +use Rector\CodeQuality\Rector\AssignOp\NewArrayItemConcatAssignToAssignRector; use Rector\CodeQuality\Rector\Attribute\SortAttributeNamedArgsRector; use Rector\CodeQuality\Rector\BooleanAnd\RemoveUselessIsObjectCheckRector; use Rector\CodeQuality\Rector\BooleanAnd\RepeatedAndNotEqualToNotInArrayRector; @@ -109,6 +110,7 @@ final class CodeQualityLevel */ public const array RULES = [ CombinedAssignRector::class, + NewArrayItemConcatAssignToAssignRector::class, SimplifyEmptyArrayCheckRector::class, ReplaceMultipleBooleanNotRector::class, ReplaceConstantBooleanNotRector::class,