From 3356ae37b292aa2fa550833604652e041d861462 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Tue, 16 Sep 2025 07:02:24 +0700 Subject: [PATCH 1/2] [TypeDeclarationDocblocks] Use mixed[] over mixed on unserialize() call on ClassMethodArrayDocblockParamFromLocalCallsRector --- .../Fixture/mixed_from_unserialize.php.inc | 40 +++++++++++++++++++ ...ArrayDocblockParamFromLocalCallsRector.php | 6 +++ 2 files changed, 46 insertions(+) create mode 100644 rules-tests/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector/Fixture/mixed_from_unserialize.php.inc diff --git a/rules-tests/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector/Fixture/mixed_from_unserialize.php.inc b/rules-tests/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector/Fixture/mixed_from_unserialize.php.inc new file mode 100644 index 00000000000..42f536c8628 --- /dev/null +++ b/rules-tests/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector/Fixture/mixed_from_unserialize.php.inc @@ -0,0 +1,40 @@ +doStuff(unserialize($param)); + } + + private function doStuff(array $value) + { + // do stuff with value + } +} + +?> +----- +doStuff(unserialize($param)); + } + + /** + * @param mixed[] $value + */ + private function doStuff(array $value) + { + // do stuff with value + } +} + +?> \ No newline at end of file diff --git a/rules/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector.php b/rules/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector.php index 12ce60a5b09..65016b5e907 100644 --- a/rules/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector.php +++ b/rules/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector.php @@ -7,6 +7,8 @@ use PhpParser\Node; use PhpParser\Node\Stmt\Class_; use PHPStan\PhpDocParser\Ast\PhpDoc\ParamTagValueNode; +use PHPStan\PhpDocParser\Ast\Type\ArrayTypeNode; +use PHPStan\PhpDocParser\Ast\Type\IdentifierTypeNode; use PHPStan\Type\ArrayType; use PHPStan\Type\IntegerType; use PHPStan\Type\MixedType; @@ -132,6 +134,10 @@ public function refactor(Node $node): ?Node $normalizedResolvedParameterType ); + if ($arrayDocTypeNode instanceof IdentifierTypeNode && $arrayDocTypeNode->name === 'mixed') { + $arrayDocTypeNode = new ArrayTypeNode($arrayDocTypeNode); + } + $paramTagValueNode = new ParamTagValueNode($arrayDocTypeNode, false, '$' . $parameterName, '', false); $classMethodPhpDocInfo->addTagValueNode($paramTagValueNode); From 4b442fa4ceb1aa22d57e3cd68a6290db8a60a4d1 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 16 Sep 2025 00:05:10 +0000 Subject: [PATCH 2/2] [ci-review] Rector Rectify --- .../ReturnTypeAnalyzer/StrictReturnNewAnalyzer.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rules/TypeDeclaration/NodeAnalyzer/ReturnTypeAnalyzer/StrictReturnNewAnalyzer.php b/rules/TypeDeclaration/NodeAnalyzer/ReturnTypeAnalyzer/StrictReturnNewAnalyzer.php index 21a099f90b3..a3aff70f2a2 100644 --- a/rules/TypeDeclaration/NodeAnalyzer/ReturnTypeAnalyzer/StrictReturnNewAnalyzer.php +++ b/rules/TypeDeclaration/NodeAnalyzer/ReturnTypeAnalyzer/StrictReturnNewAnalyzer.php @@ -4,6 +4,7 @@ namespace Rector\TypeDeclaration\NodeAnalyzer\ReturnTypeAnalyzer; +use PHPStan\Type\ObjectWithoutClassType; use PhpParser\Node\Expr\Assign; use PhpParser\Node\Expr\Closure; use PhpParser\Node\Expr\New_; @@ -53,7 +54,7 @@ public function matchAlwaysReturnVariableNew(ClassMethod|Function_ $functionLike } $returnType = $this->nodeTypeResolver->getNativeType($return->expr); - if ($returnType instanceof \PHPStan\Type\ObjectWithoutClassType) { + if ($returnType instanceof ObjectWithoutClassType) { $alwaysReturnedClassNames[] = 'object'; continue; }