From cca7a9a82164fceca8ff2850019d485647eae76a Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Thu, 25 Sep 2025 00:53:08 +0700 Subject: [PATCH 1/2] [TypeDeclarationDocblocks] Skip empty list iterable value type on ClassMethodArrayDocblockParamFromLocalCallsRector --- .../skip_empty_iterable_value_type.php.inc | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 rules-tests/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector/Fixture/skip_empty_iterable_value_type.php.inc diff --git a/rules-tests/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector/Fixture/skip_empty_iterable_value_type.php.inc b/rules-tests/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector/Fixture/skip_empty_iterable_value_type.php.inc new file mode 100644 index 00000000000..bdfd6bc198b --- /dev/null +++ b/rules-tests/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector/Fixture/skip_empty_iterable_value_type.php.inc @@ -0,0 +1,18 @@ +someCall($value); + } + + private function someCall(array $value) + { + } +} From 5538f8c0c2c323e379402e02bbb784e426e0e7e0 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Thu, 25 Sep 2025 00:58:22 +0700 Subject: [PATCH 2/2] Fix --- .../NodeDocblockTypeDecorator.php | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/rules/TypeDeclarationDocblocks/NodeDocblockTypeDecorator.php b/rules/TypeDeclarationDocblocks/NodeDocblockTypeDecorator.php index a74c46e0096..38b913e9378 100644 --- a/rules/TypeDeclarationDocblocks/NodeDocblockTypeDecorator.php +++ b/rules/TypeDeclarationDocblocks/NodeDocblockTypeDecorator.php @@ -45,6 +45,11 @@ public function decorateGenericIterableParamType( $normalizedType = $this->typeNormalizer->generalizeConstantTypes($type); $typeNode = $this->createTypeNode($normalizedType); + // no value iterable type + if ($typeNode instanceof IdentifierTypeNode) { + return false; + } + $paramTagValueNode = new ParamTagValueNode($typeNode, false, '$' . $parameterName, '', false); $this->addTagValueNodeAndUpdatePhpDocInfo($phpDocInfo, $paramTagValueNode, $classMethod); @@ -64,6 +69,11 @@ public function decorateGenericIterableReturnType( return false; } + // no value iterable type + if ($typeNode instanceof IdentifierTypeNode) { + return false; + } + $returnTagValueNode = new ReturnTagValueNode($typeNode, ''); $this->addTagValueNodeAndUpdatePhpDocInfo($classMethodPhpDocInfo, $returnTagValueNode, $classMethod); @@ -80,6 +90,11 @@ public function decorateGenericIterableVarType(Type $type, PhpDocInfo $phpDocInf return false; } + // no value iterable type + if ($typeNode instanceof IdentifierTypeNode) { + return false; + } + $varTagValueNode = new VarTagValueNode($typeNode, '', ''); $this->addTagValueNodeAndUpdatePhpDocInfo($phpDocInfo, $varTagValueNode, $property);