Skip to content

Commit db06a97

Browse files
[TypeDeclarationDocblocks] Use mixed[] over mixed on unserialize() call on ClassMethodArrayDocblockParamFromLocalCallsRector (rectorphp#7293)
* [TypeDeclarationDocblocks] Use mixed[] over mixed on unserialize() call on ClassMethodArrayDocblockParamFromLocalCallsRector * [ci-review] Rector Rectify --------- Co-authored-by: GitHub Action <actions@github.com>
1 parent 7c89713 commit db06a97

3 files changed

Lines changed: 48 additions & 1 deletion

File tree

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
<?php
2+
3+
namespace Rector\Tests\TypeDeclarationDocblocks\Rector\Class_\ClassMethodArrayDocblockParamFromLocalCallsRector\Fixture;
4+
5+
class MixedFromUnserialize
6+
{
7+
public function run(string $param)
8+
{
9+
$this->doStuff(unserialize($param));
10+
}
11+
12+
private function doStuff(array $value)
13+
{
14+
// do stuff with value
15+
}
16+
}
17+
18+
?>
19+
-----
20+
<?php
21+
22+
namespace Rector\Tests\TypeDeclarationDocblocks\Rector\Class_\ClassMethodArrayDocblockParamFromLocalCallsRector\Fixture;
23+
24+
class MixedFromUnserialize
25+
{
26+
public function run(string $param)
27+
{
28+
$this->doStuff(unserialize($param));
29+
}
30+
31+
/**
32+
* @param mixed[] $value
33+
*/
34+
private function doStuff(array $value)
35+
{
36+
// do stuff with value
37+
}
38+
}
39+
40+
?>

rules/TypeDeclaration/NodeAnalyzer/ReturnTypeAnalyzer/StrictReturnNewAnalyzer.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
namespace Rector\TypeDeclaration\NodeAnalyzer\ReturnTypeAnalyzer;
66

7+
use PHPStan\Type\ObjectWithoutClassType;
78
use PhpParser\Node\Expr\Assign;
89
use PhpParser\Node\Expr\Closure;
910
use PhpParser\Node\Expr\New_;
@@ -53,7 +54,7 @@ public function matchAlwaysReturnVariableNew(ClassMethod|Function_ $functionLike
5354
}
5455

5556
$returnType = $this->nodeTypeResolver->getNativeType($return->expr);
56-
if ($returnType instanceof \PHPStan\Type\ObjectWithoutClassType) {
57+
if ($returnType instanceof ObjectWithoutClassType) {
5758
$alwaysReturnedClassNames[] = 'object';
5859
continue;
5960
}

rules/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
use PhpParser\Node;
88
use PhpParser\Node\Stmt\Class_;
99
use PHPStan\PhpDocParser\Ast\PhpDoc\ParamTagValueNode;
10+
use PHPStan\PhpDocParser\Ast\Type\ArrayTypeNode;
11+
use PHPStan\PhpDocParser\Ast\Type\IdentifierTypeNode;
1012
use PHPStan\Type\ArrayType;
1113
use PHPStan\Type\IntegerType;
1214
use PHPStan\Type\MixedType;
@@ -132,6 +134,10 @@ public function refactor(Node $node): ?Node
132134
$normalizedResolvedParameterType
133135
);
134136

137+
if ($arrayDocTypeNode instanceof IdentifierTypeNode && $arrayDocTypeNode->name === 'mixed') {
138+
$arrayDocTypeNode = new ArrayTypeNode($arrayDocTypeNode);
139+
}
140+
135141
$paramTagValueNode = new ParamTagValueNode($arrayDocTypeNode, false, '$' . $parameterName, '', false);
136142
$classMethodPhpDocInfo->addTagValueNode($paramTagValueNode);
137143

0 commit comments

Comments
 (0)