Skip to content

Commit d5d631c

Browse files
committed
update DocblockGetterReturnArrayFromPropertyDocblockVarRector too
1 parent 68117dc commit d5d631c

File tree

4 files changed

+101
-18
lines changed

4 files changed

+101
-18
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Rector\Tests\TypeDeclarationDocblocks\Rector\ClassMethod\AddReturnDocblockForJsonArrayRector\Fixture;
6+
7+
final class OverrideDummyArray
8+
{
9+
/**
10+
* @return array
11+
*/
12+
public function provide(string $contents): array
13+
{
14+
return json_decode($contents, true);
15+
}
16+
}
17+
18+
?>
19+
-----
20+
<?php
21+
22+
declare(strict_types=1);
23+
24+
namespace Rector\Tests\TypeDeclarationDocblocks\Rector\ClassMethod\AddReturnDocblockForJsonArrayRector\Fixture;
25+
26+
final class OverrideDummyArray
27+
{
28+
/**
29+
* @return array<string, mixed>
30+
*/
31+
public function provide(string $contents): array
32+
{
33+
return json_decode($contents, true);
34+
}
35+
}
36+
37+
?>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<?php
2+
3+
namespace Rector\Tests\TypeDeclarationDocblocks\Rector\ClassMethod\DocblockGetterReturnArrayFromPropertyDocblockVarRector\Fixture;
4+
5+
final class OverrideDummyArray
6+
{
7+
/**
8+
* @var string[]
9+
*/
10+
private array $names = [];
11+
12+
/**
13+
* @return array
14+
*/
15+
public function getNames(): array
16+
{
17+
return $this->names;
18+
}
19+
}
20+
21+
?>
22+
-----
23+
<?php
24+
25+
namespace Rector\Tests\TypeDeclarationDocblocks\Rector\ClassMethod\DocblockGetterReturnArrayFromPropertyDocblockVarRector\Fixture;
26+
27+
final class OverrideDummyArray
28+
{
29+
/**
30+
* @var string[]
31+
*/
32+
private array $names = [];
33+
34+
/**
35+
* @return string[]
36+
*/
37+
public function getNames(): array
38+
{
39+
return $this->names;
40+
}
41+
}
42+
43+
?>

rules/TypeDeclarationDocblocks/Rector/ClassMethod/AddReturnDocblockForJsonArrayRector.php

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
use PhpParser\Node\Stmt\ClassMethod;
1313
use PhpParser\Node\Stmt\Function_;
1414
use PhpParser\Node\Stmt\Return_;
15-
use PHPStan\PhpDocParser\Ast\PhpDoc\ReturnTagValueNode;
1615
use PHPStan\Type\ArrayType;
1716
use PHPStan\Type\MixedType;
1817
use PHPStan\Type\StringType;
@@ -22,6 +21,7 @@
2221
use Rector\Rector\AbstractRector;
2322
use Rector\TypeDeclarationDocblocks\Enum\NetteClassName;
2423
use Rector\TypeDeclarationDocblocks\NodeFinder\ReturnNodeFinder;
24+
use Rector\TypeDeclarationDocblocks\TagNodeAnalyzer\UsefulArrayTagNodeAnalyzer;
2525
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
2626
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
2727

@@ -34,7 +34,8 @@ public function __construct(
3434
private readonly PhpDocInfoFactory $phpDocInfoFactory,
3535
private readonly ReturnNodeFinder $returnNodeFinder,
3636
private readonly PhpDocTypeChanger $phpDocTypeChanger,
37-
private readonly ValueResolver $valueResolver
37+
private readonly ValueResolver $valueResolver,
38+
private readonly UsefulArrayTagNodeAnalyzer $usefulArrayTagNodeAnalyzer
3839
) {
3940
}
4041

@@ -85,11 +86,6 @@ public function getNodeTypes(): array
8586
public function refactor(Node $node): ?Node
8687
{
8788
$phpDocInfo = $this->phpDocInfoFactory->createFromNodeOrEmpty($node);
88-
$returnType = $phpDocInfo->getReturnType();
89-
90-
if (! $returnType instanceof MixedType || $returnType->isExplicitMixed()) {
91-
return null;
92-
}
9389

9490
// definitely not an array return
9591
if ($node->returnType instanceof Node && ! $this->isName($node->returnType, 'array')) {
@@ -111,8 +107,8 @@ public function refactor(Node $node): ?Node
111107
}
112108

113109
$classMethodDocInfo = $this->phpDocInfoFactory->createFromNodeOrEmpty($node);
114-
// already filled
115-
if ($classMethodDocInfo->getReturnTagValue() instanceof ReturnTagValueNode) {
110+
111+
if ($this->usefulArrayTagNodeAnalyzer->isUsefulArrayTag($classMethodDocInfo->getReturnTagValue())) {
116112
return null;
117113
}
118114

rules/TypeDeclarationDocblocks/Rector/ClassMethod/DocblockGetterReturnArrayFromPropertyDocblockVarRector.php

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@
88
use PhpParser\Node\Expr\PropertyFetch;
99
use PhpParser\Node\Stmt\ClassMethod;
1010
use PhpParser\Node\Stmt\Return_;
11-
use PHPStan\PhpDocParser\Ast\PhpDoc\ReturnTagValueNode;
1211
use PHPStan\Type\ArrayType;
1312
use PHPStan\Type\MixedType;
1413
use PHPStan\Type\UnionType;
1514
use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory;
16-
use Rector\Comments\NodeDocBlock\DocBlockUpdater;
15+
use Rector\BetterPhpDocParser\PhpDocManipulator\PhpDocTypeChanger;
1716
use Rector\Rector\AbstractRector;
1817
use Rector\StaticTypeMapper\StaticTypeMapper;
18+
use Rector\TypeDeclarationDocblocks\TagNodeAnalyzer\UsefulArrayTagNodeAnalyzer;
1919
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
2020
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
2121

@@ -26,8 +26,9 @@ final class DocblockGetterReturnArrayFromPropertyDocblockVarRector extends Abstr
2626
{
2727
public function __construct(
2828
private readonly PhpDocInfoFactory $phpDocInfoFactory,
29-
private readonly DocBlockUpdater $docBlockUpdater,
30-
private readonly StaticTypeMapper $staticTypeMapper
29+
private readonly StaticTypeMapper $staticTypeMapper,
30+
private readonly UsefulArrayTagNodeAnalyzer $usefulArrayTagNodeAnalyzer,
31+
private readonly PhpDocTypeChanger $phpDocTypeChanger
3132
) {
3233
}
3334

@@ -91,11 +92,15 @@ public function refactor(Node $node): ?Node
9192

9293
$phpDocInfo = $this->phpDocInfoFactory->createFromNodeOrEmpty($node);
9394

94-
// return tag is already given
95-
if ($phpDocInfo->getReturnTagValue() instanceof ReturnTagValueNode) {
95+
if ($this->usefulArrayTagNodeAnalyzer->isUsefulArrayTag($phpDocInfo->getReturnTagValue())) {
9696
return null;
9797
}
9898

99+
// // return tag is already given
100+
// if ($phpDocInfo->getReturnTagValue() instanceof ReturnTagValueNode) {
101+
// return null;
102+
// }
103+
99104
$propertyFetch = $this->matchReturnLocalPropertyFetch($node);
100105
if (! $propertyFetch instanceof PropertyFetch) {
101106
return null;
@@ -115,10 +120,12 @@ public function refactor(Node $node): ?Node
115120

116121
$propertyFetchDocTypeNode = $this->staticTypeMapper->mapPHPStanTypeToPHPStanPhpDocTypeNode($propertyFetchType);
117122

118-
$returnTagValueNode = new ReturnTagValueNode($propertyFetchDocTypeNode, '');
119-
$phpDocInfo->addTagValueNode($returnTagValueNode);
123+
$this->phpDocTypeChanger->changeReturnTypeNode($node, $phpDocInfo, $propertyFetchDocTypeNode);
120124

121-
$this->docBlockUpdater->updateRefactoredNodeWithPhpDocInfo($node);
125+
// $returnTagValueNode = new ReturnTagValueNode($propertyFetchDocTypeNode, '');
126+
// $phpDocInfo->addTagValueNode($returnTagValueNode);
127+
//
128+
// $this->docBlockUpdater->updateRefactoredNodeWithPhpDocInfo($node);
122129

123130
return $node;
124131
}

0 commit comments

Comments
 (0)