diff --git a/rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/DocblockReturnArrayFromDirectArrayInstanceRector/Fixture/skip_empty_array_mixed.php.inc b/rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/DocblockReturnArrayFromDirectArrayInstanceRector/Fixture/skip_empty_array_mixed.php.inc new file mode 100644 index 00000000000..80ef5c874ed --- /dev/null +++ b/rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/DocblockReturnArrayFromDirectArrayInstanceRector/Fixture/skip_empty_array_mixed.php.inc @@ -0,0 +1,14 @@ +shouldSkipReturnMixedAndEmptyArray($phpDocInfo, $soleReturn->expr)) { + return null; + } + // resolve simple type $returnedType = $this->getType($soleReturn->expr); if (! $returnedType instanceof ConstantArrayType) { @@ -116,4 +123,19 @@ 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; + } }