Skip to content

Commit 51d0657

Browse files
committed
change existing dummy array
1 parent 7d9853f commit 51d0657

File tree

2 files changed

+44
-4
lines changed

2 files changed

+44
-4
lines changed

rules/TypeDeclarationDocblocks/Rector/ClassMethod/DocblockReturnArrayFromDirectArrayInstanceRector.php

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,11 @@
1212
use PHPStan\PhpDocParser\Ast\PhpDoc\ReturnTagValueNode;
1313
use PHPStan\Type\Constant\ConstantArrayType;
1414
use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory;
15+
use Rector\BetterPhpDocParser\PhpDocManipulator\PhpDocTypeChanger;
1516
use Rector\Comments\NodeDocBlock\DocBlockUpdater;
1617
use Rector\Rector\AbstractRector;
1718
use Rector\TypeDeclarationDocblocks\NodeFinder\ReturnNodeFinder;
19+
use Rector\TypeDeclarationDocblocks\TagNodeAnalyzer\UsefulArrayTagNodeAnalyzer;
1820
use Rector\TypeDeclarationDocblocks\TypeResolver\ConstantArrayTypeGeneralizer;
1921
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
2022
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@@ -29,6 +31,8 @@ public function __construct(
2931
private readonly DocBlockUpdater $docBlockUpdater,
3032
private readonly ConstantArrayTypeGeneralizer $constantArrayTypeGeneralizer,
3133
private readonly ReturnNodeFinder $returnNodeFinder,
34+
private readonly UsefulArrayTagNodeAnalyzer $usefulArrayTagNodeAnalyzer,
35+
private readonly PhpDocTypeChanger $phpDocTypeChanger
3236
) {
3337
}
3438

@@ -82,11 +86,17 @@ public function refactor(Node $node): ?Node
8286
{
8387
$phpDocInfo = $this->phpDocInfoFactory->createFromNodeOrEmpty($node);
8488

85-
// return tag is already given
86-
if ($phpDocInfo->getReturnTagValue() instanceof ReturnTagValueNode) {
89+
if ($this->usefulArrayTagNodeAnalyzer->isUsefulArrayTag($phpDocInfo->getReturnTagValue())) {
8790
return null;
8891
}
8992

93+
// if ($phpDocInfo->getReturnTagValue() instanceof ReturnTagValueNode) {
94+
// if ($phpDocInfo->getReturnTagValue()->type);
95+
// die;
96+
//
97+
// return null;
98+
// }
99+
90100
if ($node->stmts === null) {
91101
return null;
92102
}
@@ -108,8 +118,13 @@ public function refactor(Node $node): ?Node
108118

109119
$genericTypeNode = $this->constantArrayTypeGeneralizer->generalize($returnedType);
110120

111-
$returnTagValueNode = new ReturnTagValueNode($genericTypeNode, '');
112-
$phpDocInfo->addTagValueNode($returnTagValueNode);
121+
$existingReturnTagValueNode = $phpDocInfo->getReturnTagValue();
122+
if ($existingReturnTagValueNode instanceof ReturnTagValueNode) {
123+
$existingReturnTagValueNode->type = $genericTypeNode;
124+
} else {
125+
$returnTagValueNode = new ReturnTagValueNode($genericTypeNode, '');
126+
$phpDocInfo->addTagValueNode($returnTagValueNode);
127+
}
113128

114129
$this->docBlockUpdater->updateRefactoredNodeWithPhpDocInfo($node);
115130

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Rector\TypeDeclarationDocblocks\TagNodeAnalyzer;
6+
7+
use PHPStan\PhpDocParser\Ast\PhpDoc\ReturnTagValueNode;
8+
use PHPStan\PhpDocParser\Ast\Type\IdentifierTypeNode;
9+
10+
final class UsefulArrayTagNodeAnalyzer
11+
{
12+
public function isUsefulArrayTag(?ReturnTagValueNode $returnTagValueNode): bool
13+
{
14+
if ($returnTagValueNode === null) {
15+
return false;
16+
}
17+
18+
$type = $returnTagValueNode->type;
19+
if (! $type instanceof IdentifierTypeNode) {
20+
return true;
21+
}
22+
23+
return $type->name !== 'array';
24+
}
25+
}

0 commit comments

Comments
 (0)