Skip to content

Commit 7fbf5ed

Browse files
committed
implemented
1 parent 4569e7f commit 7fbf5ed

File tree

2 files changed

+17
-25
lines changed

2 files changed

+17
-25
lines changed

rules/TypeDeclarationDocblocks/NodeDocblockTypeDecorator.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,10 @@ private function addTagValueNodeAndUpdatePhpDocInfo(
130130

131131
private function isBareMixedType(Type $type): bool
132132
{
133+
if ($type instanceof MixedType) {
134+
return true;
135+
}
136+
133137
$normalizedResolvedParameterType = $this->typeNormalizer->generalizeConstantTypes($type);
134138

135139
// most likely mixed, skip

rules/TypeDeclarationDocblocks/Rector/ClassMethod/AddParamArrayDocblockFromDataProviderRector.php

Lines changed: 13 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,13 @@
66

77
use PhpParser\Node;
88
use PhpParser\Node\Stmt\Class_;
9-
use PHPStan\PhpDocParser\Ast\PhpDoc\ParamTagValueNode;
10-
use PHPStan\Type\ArrayType;
11-
use PHPStan\Type\MixedType;
129
use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory;
13-
use Rector\Comments\NodeDocBlock\DocBlockUpdater;
1410
use Rector\PHPUnit\NodeAnalyzer\TestsNodeAnalyzer;
15-
use Rector\Privatization\TypeManipulator\TypeNormalizer;
1611
use Rector\Rector\AbstractRector;
17-
use Rector\StaticTypeMapper\StaticTypeMapper;
1812
use Rector\TypeDeclaration\TypeAnalyzer\ParameterTypeFromDataProviderResolver;
13+
use Rector\TypeDeclarationDocblocks\NodeDocblockTypeDecorator;
1914
use Rector\TypeDeclarationDocblocks\NodeFinder\DataProviderMethodsFinder;
15+
use Rector\TypeDeclarationDocblocks\TagNodeAnalyzer\UsefulArrayTagNodeAnalyzer;
2016
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
2117
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
2218

@@ -27,12 +23,11 @@ final class AddParamArrayDocblockFromDataProviderRector extends AbstractRector
2723
{
2824
public function __construct(
2925
private readonly PhpDocInfoFactory $phpDocInfoFactory,
30-
private readonly DocBlockUpdater $docBlockUpdater,
3126
private readonly TestsNodeAnalyzer $testsNodeAnalyzer,
3227
private readonly DataProviderMethodsFinder $dataProviderMethodsFinder,
3328
private readonly ParameterTypeFromDataProviderResolver $parameterTypeFromDataProviderResolver,
34-
private readonly StaticTypeMapper $staticTypeMapper,
35-
private readonly TypeNormalizer $typeNormalizer,
29+
private readonly UsefulArrayTagNodeAnalyzer $usefulArrayTagNodeAnalyzer,
30+
private readonly NodeDocblockTypeDecorator $nodeDocblockTypeDecorator
3631
) {
3732
}
3833

@@ -137,7 +132,7 @@ public function refactor(Node $node): ?Node
137132
$paramTagValueNode = $phpDocInfo->getParamTagValueByName($paramName);
138133

139134
// already defined, lets skip it
140-
if ($paramTagValueNode instanceof ParamTagValueNode) {
135+
if ($this->usefulArrayTagNodeAnalyzer->isUsefulArrayTag($paramTagValueNode)) {
141136
continue;
142137
}
143138

@@ -146,26 +141,19 @@ public function refactor(Node $node): ?Node
146141
$dataProviderNodes->getClassMethods()
147142
);
148143

149-
// skip mixed type, as it is not informative
150-
if ($parameterType instanceof ArrayType && $parameterType->getItemType() instanceof MixedType) {
151-
continue;
152-
}
144+
$hasParamTypeChanged = $this->nodeDocblockTypeDecorator->decorateGenericIterableParamType(
145+
$parameterType,
146+
$phpDocInfo,
147+
$classMethod,
148+
$param,
149+
$paramName
150+
);
153151

154-
if ($parameterType instanceof MixedType) {
152+
if (! $hasParamTypeChanged) {
155153
continue;
156154
}
157155

158-
$generalizedParameterType = $this->typeNormalizer->generalizeConstantTypes($parameterType);
159-
160-
$parameterTypeNode = $this->staticTypeMapper->mapPHPStanTypeToPHPStanPhpDocTypeNode(
161-
$generalizedParameterType
162-
);
163-
164-
$paramTagValueNode = new ParamTagValueNode($parameterTypeNode, false, '$' . $paramName, '', false);
165-
$phpDocInfo->addTagValueNode($paramTagValueNode);
166156
$hasChanged = true;
167-
168-
$this->docBlockUpdater->updateRefactoredNodeWithPhpDocInfo($classMethod);
169157
}
170158

171159
}

0 commit comments

Comments
 (0)