diff --git a/rules-tests/TypeDeclaration/Rector/ClassMethod/AddReturnArrayDocblockBasedOnArrayMapRector/Fixture/skip_already_has_return_doc.php.inc b/rules-tests/TypeDeclaration/Rector/ClassMethod/AddReturnArrayDocblockBasedOnArrayMapRector/Fixture/skip_already_has_return_doc.php.inc new file mode 100644 index 00000000000..968e5c169b7 --- /dev/null +++ b/rules-tests/TypeDeclaration/Rector/ClassMethod/AddReturnArrayDocblockBasedOnArrayMapRector/Fixture/skip_already_has_return_doc.php.inc @@ -0,0 +1,18 @@ + + */ + public function process(array $items) + { + return array_map(function ($item): stdClass { + return $item; + }, $items); + } +} diff --git a/rules/TypeDeclaration/Rector/ClassMethod/AddReturnArrayDocblockBasedOnArrayMapRector.php b/rules/TypeDeclaration/Rector/ClassMethod/AddReturnArrayDocblockBasedOnArrayMapRector.php index d820ddedcef..832fc9480aa 100644 --- a/rules/TypeDeclaration/Rector/ClassMethod/AddReturnArrayDocblockBasedOnArrayMapRector.php +++ b/rules/TypeDeclaration/Rector/ClassMethod/AddReturnArrayDocblockBasedOnArrayMapRector.php @@ -13,6 +13,7 @@ use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Function_; use PHPStan\Type\ArrayType; +use PHPStan\Type\IntersectionType; use PHPStan\Type\MixedType; use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory; use Rector\BetterPhpDocParser\PhpDocManipulator\PhpDocTypeChanger; @@ -125,6 +126,11 @@ public function refactor(Node $node): null|Function_|ClassMethod $functionLikePhpDocInfo = $this->phpDocInfoFactory->createFromNodeOrEmpty($node); + $returnOriginalType = $functionLikePhpDocInfo->getReturnType(); + if ($returnOriginalType instanceof IntersectionType && $returnOriginalType->isArray()->yes()) { + return null; + } + $hasChanged = $this->phpDocTypeChanger->changeReturnType($node, $functionLikePhpDocInfo, $arrayType); if ($hasChanged) { return $node; diff --git a/rules/TypeDeclarationDocblocks/Rector/ClassMethod/AddReturnDocblockForCommonObjectDenominatorRector.php b/rules/TypeDeclarationDocblocks/Rector/ClassMethod/AddReturnDocblockForCommonObjectDenominatorRector.php index bd0e8474a51..b12e0b160d4 100644 --- a/rules/TypeDeclarationDocblocks/Rector/ClassMethod/AddReturnDocblockForCommonObjectDenominatorRector.php +++ b/rules/TypeDeclarationDocblocks/Rector/ClassMethod/AddReturnDocblockForCommonObjectDenominatorRector.php @@ -9,7 +9,6 @@ use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Function_; use PhpParser\Node\Stmt\Return_; -use PHPStan\PhpDocParser\Ast\PhpDoc\ReturnTagValueNode; use PHPStan\Reflection\ReflectionProvider; use PHPStan\Type\ArrayType; use PHPStan\Type\Constant\ConstantArrayType; @@ -109,10 +108,6 @@ public function getNodeTypes(): array public function refactor(Node $node): ?Node { $phpDocInfo = $this->phpDocInfoFactory->createFromNodeOrEmpty($node); - if ($phpDocInfo->getReturnTagValue() instanceof ReturnTagValueNode) { - return null; - } - $returnType = $phpDocInfo->getReturnType(); if (! $returnType instanceof MixedType || $returnType->isExplicitMixed()) {