From ba0e85966b7a1ab3c298af7a45721339290635fd Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Wed, 2 Sep 2026 14:31:36 +0200 Subject: [PATCH] [TypeDeclarationDocblocks] Skip empty array return in DocblockReturnArrayFromDirectArrayInstanceRector A @return array{} is the narrowest array type. When added to a method that can be overridden, any child returning a filled array violates it. Empty array{} docblocks carry no useful information, so skip them entirely. --- .../Fixture/return_empty.php.inc | 30 ------------------- .../Fixture/skip_return_empty.php.inc | 11 +++++++ ...turnArrayFromDirectArrayInstanceRector.php | 21 ++----------- 3 files changed, 13 insertions(+), 49 deletions(-) delete mode 100644 rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/DocblockReturnArrayFromDirectArrayInstanceRector/Fixture/return_empty.php.inc create mode 100644 rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/DocblockReturnArrayFromDirectArrayInstanceRector/Fixture/skip_return_empty.php.inc diff --git a/rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/DocblockReturnArrayFromDirectArrayInstanceRector/Fixture/return_empty.php.inc b/rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/DocblockReturnArrayFromDirectArrayInstanceRector/Fixture/return_empty.php.inc deleted file mode 100644 index 4beb2996db5..00000000000 --- a/rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/DocblockReturnArrayFromDirectArrayInstanceRector/Fixture/return_empty.php.inc +++ /dev/null @@ -1,30 +0,0 @@ - ------ - diff --git a/rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/DocblockReturnArrayFromDirectArrayInstanceRector/Fixture/skip_return_empty.php.inc b/rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/DocblockReturnArrayFromDirectArrayInstanceRector/Fixture/skip_return_empty.php.inc new file mode 100644 index 00000000000..8f37bb8e9ff --- /dev/null +++ b/rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/DocblockReturnArrayFromDirectArrayInstanceRector/Fixture/skip_return_empty.php.inc @@ -0,0 +1,11 @@ +shouldSkipReturnMixedAndEmptyArray($phpDocInfo, $soleReturn->expr)) { + // skip empty array; @return array{} is the narrowest array type and breaks any child override that returns a filled array + if ($soleReturn->expr->items === []) { return null; } @@ -132,19 +130,4 @@ public function refactor(Node $node): ?Node return $node; } - - private function shouldSkipReturnMixedAndEmptyArray(PhpDocInfo $phpDocInfo, Array_ $array): bool - { - if ($array->items !== []) { - return false; - } - - $returnTagValueNode = $phpDocInfo->getReturnTagValue(); - if (! $returnTagValueNode instanceof ReturnTagValueNode) { - return false; - } - - // better than array{} - return $returnTagValueNode->type instanceof ArrayTypeNode; - } }