From 873d28774cc56b7f75c5c71296e0b20b503155a7 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Mon, 3 Aug 2026 16:55:55 +0700 Subject: [PATCH 1/2] [TypeDeclarationDocblocks] Skip reprint docblock on no change on AddParamArrayDocblockFromAssignsParamToParamReferenceRector --- .../Fixture/skip_reprint_doc.php.inc | 31 +++++++++++++++++++ .../NodeDocblockTypeDecorator.php | 6 ++++ 2 files changed, 37 insertions(+) create mode 100644 rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/AddParamArrayDocblockFromAssignsParamToParamReferenceRector/Fixture/skip_reprint_doc.php.inc diff --git a/rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/AddParamArrayDocblockFromAssignsParamToParamReferenceRector/Fixture/skip_reprint_doc.php.inc b/rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/AddParamArrayDocblockFromAssignsParamToParamReferenceRector/Fixture/skip_reprint_doc.php.inc new file mode 100644 index 00000000000..ec1653364c2 --- /dev/null +++ b/rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/AddParamArrayDocblockFromAssignsParamToParamReferenceRector/Fixture/skip_reprint_doc.php.inc @@ -0,0 +1,31 @@ +traverseNodes($childNode, $mentions); + } + } + } +} \ No newline at end of file diff --git a/rules/TypeDeclarationDocblocks/NodeDocblockTypeDecorator.php b/rules/TypeDeclarationDocblocks/NodeDocblockTypeDecorator.php index 1f626242910..cf30d0e0384 100644 --- a/rules/TypeDeclarationDocblocks/NodeDocblockTypeDecorator.php +++ b/rules/TypeDeclarationDocblocks/NodeDocblockTypeDecorator.php @@ -7,6 +7,7 @@ use PhpParser\Node\FunctionLike; use PhpParser\Node\Param; use PhpParser\Node\Stmt\Property; +use PHPStan\PhpDocParser\Ast\PhpDoc\ParamTagValueNode; use PHPStan\PhpDocParser\Ast\Type\ArrayTypeNode; use PHPStan\PhpDocParser\Ast\Type\IdentifierTypeNode; use PHPStan\PhpDocParser\Ast\Type\TypeNode; @@ -48,6 +49,11 @@ public function decorateGenericIterableParamType( return false; } + $paramTagValueNode = $phpDocInfo->getParamTagValueByName($parameterName); + if ($paramTagValueNode instanceof ParamTagValueNode && (string) $paramTagValueNode->type === (string) $typeNode) { + return false; + } + $this->phpDocTypeChanger->changeParamTypeNode($functionLike, $phpDocInfo, $param, $parameterName, $typeNode); return true; From e43e2a20337cffd549a220e53fb6e03c0c413b57 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Mon, 3 Aug 2026 16:56:59 +0700 Subject: [PATCH 2/2] eol --- .../Fixture/skip_reprint_doc.php.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/AddParamArrayDocblockFromAssignsParamToParamReferenceRector/Fixture/skip_reprint_doc.php.inc b/rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/AddParamArrayDocblockFromAssignsParamToParamReferenceRector/Fixture/skip_reprint_doc.php.inc index ec1653364c2..96b3cd1d940 100644 --- a/rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/AddParamArrayDocblockFromAssignsParamToParamReferenceRector/Fixture/skip_reprint_doc.php.inc +++ b/rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/AddParamArrayDocblockFromAssignsParamToParamReferenceRector/Fixture/skip_reprint_doc.php.inc @@ -28,4 +28,4 @@ final class SkipReprintDoc } } } -} \ No newline at end of file +}