Skip to content

Commit 5f0de3a

Browse files
committed
Updated Rector to commit dfa1141cf2b77ec1c65e7795599508f116e7b73b
rectorphp/rector-src@dfa1141 [TypeDeclaration] Do not change valid generic docblock on NarrowObjectReturnTypeRector (#7617)
1 parent 4890788 commit 5f0de3a

File tree

2 files changed

+32
-5
lines changed

2 files changed

+32
-5
lines changed

rules/TypeDeclaration/Rector/ClassMethod/NarrowObjectReturnTypeRector.php

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,19 @@
99
use PhpParser\Node\Stmt\ClassMethod;
1010
use PHPStan\PhpDocParser\Ast\PhpDoc\ReturnTagValueNode;
1111
use PHPStan\PhpDocParser\Ast\Type\GenericTypeNode;
12+
use PHPStan\PhpDocParser\Ast\Type\IdentifierTypeNode;
1213
use PHPStan\Reflection\ClassReflection;
1314
use PHPStan\Type\ObjectType;
1415
use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfo;
1516
use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory;
1617
use Rector\BetterPhpDocParser\ValueObject\Type\FullyQualifiedIdentifierTypeNode;
1718
use Rector\Comments\NodeDocBlock\DocBlockUpdater;
19+
use Rector\NodeTypeResolver\TypeComparator\TypeComparator;
1820
use Rector\PhpParser\AstResolver;
1921
use Rector\PhpParser\Node\BetterNodeFinder;
2022
use Rector\Rector\AbstractRector;
2123
use Rector\Reflection\ReflectionResolver;
24+
use Rector\StaticTypeMapper\StaticTypeMapper;
2225
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
2326
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
2427
/**
@@ -40,6 +43,14 @@ final class NarrowObjectReturnTypeRector extends AbstractRector
4043
* @readonly
4144
*/
4245
private AstResolver $astResolver;
46+
/**
47+
* @readonly
48+
*/
49+
private StaticTypeMapper $staticTypeMapper;
50+
/**
51+
* @readonly
52+
*/
53+
private TypeComparator $typeComparator;
4354
/**
4455
* @readonly
4556
*/
@@ -48,11 +59,13 @@ final class NarrowObjectReturnTypeRector extends AbstractRector
4859
* @readonly
4960
*/
5061
private DocBlockUpdater $docBlockUpdater;
51-
public function __construct(BetterNodeFinder $betterNodeFinder, ReflectionResolver $reflectionResolver, AstResolver $astResolver, PhpDocInfoFactory $phpDocInfoFactory, DocBlockUpdater $docBlockUpdater)
62+
public function __construct(BetterNodeFinder $betterNodeFinder, ReflectionResolver $reflectionResolver, AstResolver $astResolver, StaticTypeMapper $staticTypeMapper, TypeComparator $typeComparator, PhpDocInfoFactory $phpDocInfoFactory, DocBlockUpdater $docBlockUpdater)
5263
{
5364
$this->betterNodeFinder = $betterNodeFinder;
5465
$this->reflectionResolver = $reflectionResolver;
5566
$this->astResolver = $astResolver;
67+
$this->staticTypeMapper = $staticTypeMapper;
68+
$this->typeComparator = $typeComparator;
5669
$this->phpDocInfoFactory = $phpDocInfoFactory;
5770
$this->docBlockUpdater = $docBlockUpdater;
5871
}
@@ -153,10 +166,24 @@ private function updateDocblock(ClassMethod $classMethod, string $actualReturnCl
153166
if (!$returnTagValueNode instanceof ReturnTagValueNode) {
154167
return;
155168
}
156-
if (!$returnTagValueNode->type instanceof GenericTypeNode) {
169+
if ($returnTagValueNode->type instanceof IdentifierTypeNode) {
170+
$oldType = $this->staticTypeMapper->mapPHPStanPhpDocTypeNodeToPHPStanType($returnTagValueNode->type, $classMethod);
171+
} elseif ($returnTagValueNode->type instanceof GenericTypeNode) {
172+
$oldType = $this->staticTypeMapper->mapPHPStanPhpDocTypeNodeToPHPStanType($returnTagValueNode->type->type, $classMethod);
173+
} else {
157174
return;
158175
}
159-
$returnTagValueNode->type->type = new FullyQualifiedIdentifierTypeNode($actualReturnClass);
176+
if ($oldType instanceof ObjectType) {
177+
$objectType = new ObjectType($actualReturnClass);
178+
if ($this->typeComparator->areTypesEqual($oldType, $objectType)) {
179+
return;
180+
}
181+
}
182+
if ($returnTagValueNode->type instanceof IdentifierTypeNode) {
183+
$returnTagValueNode->type = new FullyQualifiedIdentifierTypeNode($actualReturnClass);
184+
} else {
185+
$returnTagValueNode->type->type = new FullyQualifiedIdentifierTypeNode($actualReturnClass);
186+
}
160187
$this->docBlockUpdater->updateRefactoredNodeWithPhpDocInfo($classMethod);
161188
}
162189
private function isDeclaredTypeFinal(string $declaredType): bool

src/Application/VersionResolver.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@ final class VersionResolver
1919
* @api
2020
* @var string
2121
*/
22-
public const PACKAGE_VERSION = '86cde8ae0d3198c0ec0f39593ff9c5bfa25a6cd0';
22+
public const PACKAGE_VERSION = 'dfa1141cf2b77ec1c65e7795599508f116e7b73b';
2323
/**
2424
* @api
2525
* @var string
2626
*/
27-
public const RELEASE_DATE = '2025-11-10 01:08:33';
27+
public const RELEASE_DATE = '2025-11-10 02:03:44';
2828
/**
2929
* @var int
3030
*/

0 commit comments

Comments
 (0)