Skip to content

Commit 4890788

Browse files
committed
Updated Rector to commit 86cde8ae0d3198c0ec0f39593ff9c5bfa25a6cd0
rectorphp/rector-src@86cde8a [TypeDeclaration] Also update generic collection docblock on NarrowObjectReturnTypeRector (#7616)
1 parent 472ca9a commit 4890788

File tree

2 files changed

+36
-3
lines changed

2 files changed

+36
-3
lines changed

rules/TypeDeclaration/Rector/ClassMethod/NarrowObjectReturnTypeRector.php

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,14 @@
77
use PhpParser\Node\Identifier;
88
use PhpParser\Node\Name\FullyQualified;
99
use PhpParser\Node\Stmt\ClassMethod;
10+
use PHPStan\PhpDocParser\Ast\PhpDoc\ReturnTagValueNode;
11+
use PHPStan\PhpDocParser\Ast\Type\GenericTypeNode;
1012
use PHPStan\Reflection\ClassReflection;
1113
use PHPStan\Type\ObjectType;
14+
use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfo;
15+
use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory;
16+
use Rector\BetterPhpDocParser\ValueObject\Type\FullyQualifiedIdentifierTypeNode;
17+
use Rector\Comments\NodeDocBlock\DocBlockUpdater;
1218
use Rector\PhpParser\AstResolver;
1319
use Rector\PhpParser\Node\BetterNodeFinder;
1420
use Rector\Rector\AbstractRector;
@@ -34,11 +40,21 @@ final class NarrowObjectReturnTypeRector extends AbstractRector
3440
* @readonly
3541
*/
3642
private AstResolver $astResolver;
37-
public function __construct(BetterNodeFinder $betterNodeFinder, ReflectionResolver $reflectionResolver, AstResolver $astResolver)
43+
/**
44+
* @readonly
45+
*/
46+
private PhpDocInfoFactory $phpDocInfoFactory;
47+
/**
48+
* @readonly
49+
*/
50+
private DocBlockUpdater $docBlockUpdater;
51+
public function __construct(BetterNodeFinder $betterNodeFinder, ReflectionResolver $reflectionResolver, AstResolver $astResolver, PhpDocInfoFactory $phpDocInfoFactory, DocBlockUpdater $docBlockUpdater)
3852
{
3953
$this->betterNodeFinder = $betterNodeFinder;
4054
$this->reflectionResolver = $reflectionResolver;
4155
$this->astResolver = $astResolver;
56+
$this->phpDocInfoFactory = $phpDocInfoFactory;
57+
$this->docBlockUpdater = $docBlockUpdater;
4258
}
4359
public function getRuleDefinition(): RuleDefinition
4460
{
@@ -124,8 +140,25 @@ public function refactor(Node $node): ?Node
124140
return null;
125141
}
126142
$node->returnType = new FullyQualified($actualReturnClass);
143+
$this->updateDocblock($node, $actualReturnClass);
127144
return $node;
128145
}
146+
private function updateDocblock(ClassMethod $classMethod, string $actualReturnClass): void
147+
{
148+
$phpDocInfo = $this->phpDocInfoFactory->createFromNode($classMethod);
149+
if (!$phpDocInfo instanceof PhpDocInfo) {
150+
return;
151+
}
152+
$returnTagValueNode = $phpDocInfo->getReturnTagValue();
153+
if (!$returnTagValueNode instanceof ReturnTagValueNode) {
154+
return;
155+
}
156+
if (!$returnTagValueNode->type instanceof GenericTypeNode) {
157+
return;
158+
}
159+
$returnTagValueNode->type->type = new FullyQualifiedIdentifierTypeNode($actualReturnClass);
160+
$this->docBlockUpdater->updateRefactoredNodeWithPhpDocInfo($classMethod);
161+
}
129162
private function isDeclaredTypeFinal(string $declaredType): bool
130163
{
131164
if ($declaredType === 'object') {

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 = 'df4f9b6ee97a0a30775bba2ca88ff9d6562066b7';
22+
public const PACKAGE_VERSION = '86cde8ae0d3198c0ec0f39593ff9c5bfa25a6cd0';
2323
/**
2424
* @api
2525
* @var string
2626
*/
27-
public const RELEASE_DATE = '2025-11-09 17:45:20';
27+
public const RELEASE_DATE = '2025-11-10 01:08:33';
2828
/**
2929
* @var int
3030
*/

0 commit comments

Comments
 (0)