From 1abb66265056de18801d6761dfe1b6fcf3c4e7f3 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Wed, 1 Oct 2025 09:39:49 +0700 Subject: [PATCH 1/2] [TypeDeclarationDocblocks] Use existing NodeDocblockTypeDecorator service on AddReturnDocblockForArrayDimAssignedObjectRector --- ...nDocblockForArrayDimAssignedObjectRector.php | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/rules/TypeDeclarationDocblocks/Rector/ClassMethod/AddReturnDocblockForArrayDimAssignedObjectRector.php b/rules/TypeDeclarationDocblocks/Rector/ClassMethod/AddReturnDocblockForArrayDimAssignedObjectRector.php index c46ae24726e..bf38a8df846 100644 --- a/rules/TypeDeclarationDocblocks/Rector/ClassMethod/AddReturnDocblockForArrayDimAssignedObjectRector.php +++ b/rules/TypeDeclarationDocblocks/Rector/ClassMethod/AddReturnDocblockForArrayDimAssignedObjectRector.php @@ -21,10 +21,9 @@ use PHPStan\Type\ObjectType; use PHPStan\Type\Type; use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory; -use Rector\BetterPhpDocParser\PhpDocManipulator\PhpDocTypeChanger; use Rector\Rector\AbstractRector; -use Rector\StaticTypeMapper\StaticTypeMapper; use Rector\StaticTypeMapper\ValueObject\Type\NonExistingObjectType; +use Rector\TypeDeclarationDocblocks\NodeDocblockTypeDecorator; use Rector\TypeDeclarationDocblocks\NodeFinder\ReturnNodeFinder; use Rector\TypeDeclarationDocblocks\TagNodeAnalyzer\UsefulArrayTagNodeAnalyzer; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; @@ -38,9 +37,8 @@ final class AddReturnDocblockForArrayDimAssignedObjectRector extends AbstractRec public function __construct( private readonly PhpDocInfoFactory $phpDocInfoFactory, private readonly ReturnNodeFinder $returnNodeFinder, - private readonly PhpDocTypeChanger $phpDocTypeChanger, - private readonly StaticTypeMapper $staticTypeMapper, - private readonly UsefulArrayTagNodeAnalyzer $usefulArrayTagNodeAnalyzer + private readonly UsefulArrayTagNodeAnalyzer $usefulArrayTagNodeAnalyzer, + private readonly NodeDocblockTypeDecorator $nodeDocblockTypeDecorator ) { } @@ -142,8 +140,13 @@ public function refactor(Node $node): ?Node } $objectTypeArrayType = new ArrayType(new MixedType(), $arrayObjectType); - $returnTypeNode = $this->staticTypeMapper->mapPHPStanTypeToPHPStanPhpDocTypeNode($objectTypeArrayType); - $this->phpDocTypeChanger->changeReturnTypeNode($node, $phpDocInfo, $returnTypeNode); + if (! $this->nodeDocblockTypeDecorator->decorateGenericIterableReturnType( + $objectTypeArrayType, + $phpDocInfo, + $node + )) { + return null; + } return $node; } From d0dbd96c2c844f8782fdb710a4c774c145a9a3ea Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Wed, 1 Oct 2025 09:44:08 +0700 Subject: [PATCH 2/2] fix phpsan --- rules/TypeDeclarationDocblocks/NodeDocblockTypeDecorator.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/rules/TypeDeclarationDocblocks/NodeDocblockTypeDecorator.php b/rules/TypeDeclarationDocblocks/NodeDocblockTypeDecorator.php index ec8845dc3ba..14d42c9195f 100644 --- a/rules/TypeDeclarationDocblocks/NodeDocblockTypeDecorator.php +++ b/rules/TypeDeclarationDocblocks/NodeDocblockTypeDecorator.php @@ -4,6 +4,7 @@ namespace Rector\TypeDeclarationDocblocks; +use PhpParser\Node\FunctionLike; use PhpParser\Node\Param; use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Property; @@ -56,7 +57,7 @@ public function decorateGenericIterableParamType( public function decorateGenericIterableReturnType( Type $type, PhpDocInfo $classMethodPhpDocInfo, - ClassMethod $classMethod + FunctionLike $functionLike ): bool { if ($this->isBareMixedType($type)) { // no value @@ -70,7 +71,7 @@ public function decorateGenericIterableReturnType( return false; } - $this->phpDocTypeChanger->changeReturnTypeNode($classMethod, $classMethodPhpDocInfo, $typeNode); + $this->phpDocTypeChanger->changeReturnTypeNode($functionLike, $classMethodPhpDocInfo, $typeNode); return true; }