From c0070b1d30a0040e3e58724ac1b3b339e168dcb5 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Wed, 10 Aug 2022 18:07:57 +0700 Subject: [PATCH] [CodeQuality] Skip not ArrayType on ForeachItemsAssignToEmptyArrayToAssignRector (#2752) Co-authored-by: Gocha Ossinkine --- .../Fixture/fixture.php.inc | 4 ++-- .../Fixture/skip_mixed_type.php.inc | 14 ++++++++++++++ .../Fixture/skip_traversable.php.inc | 19 +++++++++++++++++++ ...hItemsAssignToEmptyArrayToAssignRector.php | 16 ++-------------- 4 files changed, 37 insertions(+), 16 deletions(-) create mode 100644 rules-tests/CodeQuality/Rector/Foreach_/ForeachItemsAssignToEmptyArrayToAssignRector/Fixture/skip_mixed_type.php.inc create mode 100644 rules-tests/CodeQuality/Rector/Foreach_/ForeachItemsAssignToEmptyArrayToAssignRector/Fixture/skip_traversable.php.inc diff --git a/rules-tests/CodeQuality/Rector/Foreach_/ForeachItemsAssignToEmptyArrayToAssignRector/Fixture/fixture.php.inc b/rules-tests/CodeQuality/Rector/Foreach_/ForeachItemsAssignToEmptyArrayToAssignRector/Fixture/fixture.php.inc index 862700cfdd2..7cb9a0f0558 100644 --- a/rules-tests/CodeQuality/Rector/Foreach_/ForeachItemsAssignToEmptyArrayToAssignRector/Fixture/fixture.php.inc +++ b/rules-tests/CodeQuality/Rector/Foreach_/ForeachItemsAssignToEmptyArrayToAssignRector/Fixture/fixture.php.inc @@ -4,7 +4,7 @@ namespace Rector\Tests\CodeQuality\Rector\Foreach_\ForeachItemsAssignToEmptyArra class Fixture { - public function run($items) + public function run(array $items) { $items2 = []; foreach ($items as $item) { @@ -21,7 +21,7 @@ namespace Rector\Tests\CodeQuality\Rector\Foreach_\ForeachItemsAssignToEmptyArra class Fixture { - public function run($items) + public function run(array $items) { $items2 = []; $items2 = $items; diff --git a/rules-tests/CodeQuality/Rector/Foreach_/ForeachItemsAssignToEmptyArrayToAssignRector/Fixture/skip_mixed_type.php.inc b/rules-tests/CodeQuality/Rector/Foreach_/ForeachItemsAssignToEmptyArrayToAssignRector/Fixture/skip_mixed_type.php.inc new file mode 100644 index 00000000000..d12521a9bb4 --- /dev/null +++ b/rules-tests/CodeQuality/Rector/Foreach_/ForeachItemsAssignToEmptyArrayToAssignRector/Fixture/skip_mixed_type.php.inc @@ -0,0 +1,14 @@ +getTraversable() as $item) { + $items[] = $item; + } + } + + private function getTraversable(): iterable + { + yield 123; + } +} diff --git a/rules/CodeQuality/Rector/Foreach_/ForeachItemsAssignToEmptyArrayToAssignRector.php b/rules/CodeQuality/Rector/Foreach_/ForeachItemsAssignToEmptyArrayToAssignRector.php index 79a000eebfb..98bb99b1de0 100644 --- a/rules/CodeQuality/Rector/Foreach_/ForeachItemsAssignToEmptyArrayToAssignRector.php +++ b/rules/CodeQuality/Rector/Foreach_/ForeachItemsAssignToEmptyArrayToAssignRector.php @@ -9,8 +9,7 @@ use PhpParser\Node\Expr\Assign; use PhpParser\Node\Stmt\Foreach_; use PHPStan\Analyser\Scope; -use PHPStan\Type\ObjectType; -use PHPStan\Type\ThisType; +use PHPStan\Type\ArrayType; use Rector\CodeQuality\NodeAnalyzer\ForeachAnalyzer; use Rector\Core\Rector\AbstractScopeAwareRector; use Rector\NodeNestingScope\ValueObject\ControlStructure; @@ -117,18 +116,7 @@ private function shouldSkip(Foreach_ $foreach, Scope $scope): bool } $type = $scope->getType($foreach->expr); - - if ($type instanceof ObjectType) { - return $type->isIterable() - ->yes(); - } - - if ($type instanceof ThisType) { - return $type->isIterable() - ->yes(); - } - - return false; + return ! $type instanceof ArrayType; } private function shouldSkipAsPartOfOtherLoop(Foreach_ $foreach): bool