From 0fdc9646c5b2679b8abfa4301e65b454f1790173 Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Tue, 23 Sep 2025 18:10:40 +0200 Subject: [PATCH] [type-declaration-docblocks] Skip empty array in ClassMethodArrayDocblockParamFromLocalCallsRector --- .../Fixture/empty_array_no_type.php.inc | 40 +++++++++++++++++++ .../Fixture/skip_empty_array.php.inc | 15 +++++++ .../NodeAnalyzer/CallTypesResolver.php | 6 +++ 3 files changed, 61 insertions(+) create mode 100644 rules-tests/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector/Fixture/empty_array_no_type.php.inc create mode 100644 rules-tests/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector/Fixture/skip_empty_array.php.inc diff --git a/rules-tests/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector/Fixture/empty_array_no_type.php.inc b/rules-tests/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector/Fixture/empty_array_no_type.php.inc new file mode 100644 index 00000000000..61f9c0acc29 --- /dev/null +++ b/rules-tests/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector/Fixture/empty_array_no_type.php.inc @@ -0,0 +1,40 @@ +run(['item1', 'item2']); + $this->run([]); + } + + private function run(array $items) + { + } +} + +?> +----- +run(['item1', 'item2']); + $this->run([]); + } + + /** + * @param string[] $items + */ + private function run(array $items) + { + } +} + +?> diff --git a/rules-tests/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector/Fixture/skip_empty_array.php.inc b/rules-tests/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector/Fixture/skip_empty_array.php.inc new file mode 100644 index 00000000000..9dae733d84b --- /dev/null +++ b/rules-tests/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector/Fixture/skip_empty_array.php.inc @@ -0,0 +1,15 @@ +run([]); + } + + private function run(array $items) + { + } +} diff --git a/rules/TypeDeclaration/NodeAnalyzer/CallTypesResolver.php b/rules/TypeDeclaration/NodeAnalyzer/CallTypesResolver.php index 47adc005f04..32f5e3a3db6 100644 --- a/rules/TypeDeclaration/NodeAnalyzer/CallTypesResolver.php +++ b/rules/TypeDeclaration/NodeAnalyzer/CallTypesResolver.php @@ -5,6 +5,7 @@ namespace Rector\TypeDeclaration\NodeAnalyzer; use PhpParser\Node\Arg; +use PhpParser\Node\Expr\Array_; use PhpParser\Node\Expr\MethodCall; use PhpParser\Node\Expr\StaticCall; use PhpParser\Node\Identifier; @@ -43,6 +44,11 @@ public function resolveStrictTypesFromCalls(array $calls): array return []; } + if ($arg->value instanceof Array_ && $arg->value->items === []) { + // skip empty array, as it doesn't add any value + continue; + } + $staticTypesByArgumentPosition[$position][] = $this->resolveStrictArgValueType($arg); } }