diff --git a/rules-tests/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector/Fixture/override_dummy_array_param.php.inc b/rules-tests/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector/Fixture/override_dummy_array_param.php.inc new file mode 100644 index 00000000000..1ba998f2cbf --- /dev/null +++ b/rules-tests/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector/Fixture/override_dummy_array_param.php.inc @@ -0,0 +1,41 @@ +run(['item1', 'item2']); + } + + /** + * @param array $items + */ + private function run(array $items) + { + } +} + +?> +----- +run(['item1', 'item2']); + } + + /** + * @param string[] $items + */ + private function run(array $items) + { + } +} + +?> diff --git a/rules/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector.php b/rules/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector.php index ddf5f25009d..b0fa7b9eb66 100644 --- a/rules/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector.php +++ b/rules/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector.php @@ -17,6 +17,7 @@ use Rector\Rector\AbstractRector; use Rector\TypeDeclaration\NodeAnalyzer\CallTypesResolver; use Rector\TypeDeclarationDocblocks\NodeDocblockTypeDecorator; +use Rector\TypeDeclarationDocblocks\TagNodeAnalyzer\UsefulArrayTagNodeAnalyzer; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; @@ -29,6 +30,7 @@ public function __construct( private readonly PhpDocInfoFactory $phpDocInfoFactory, private readonly CallTypesResolver $callTypesResolver, private readonly LocalMethodCallFinder $localMethodCallFinder, + private readonly UsefulArrayTagNodeAnalyzer $usefulArrayTagNodeAnalyzer, private readonly NodeDocblockTypeDecorator $nodeDocblockTypeDecorator ) { } @@ -103,7 +105,7 @@ public function refactor(Node $node): ?Node $parameterTagValueNode = $classMethodPhpDocInfo->getParamTagValueByName($parameterName); // already known, skip - if ($parameterTagValueNode instanceof ParamTagValueNode) { + if ($this->usefulArrayTagNodeAnalyzer->isUsefulArrayTag($parameterTagValueNode)) { continue; } @@ -112,14 +114,6 @@ public function refactor(Node $node): ?Node continue; } - if ($resolvedParameterType instanceof MixedType) { - continue; - } - - if ($resolvedParameterType instanceof ArrayType && $resolvedParameterType->getItemType() instanceof MixedType && $resolvedParameterType->getKeyType() instanceof MixedType) { - continue; - } - // in case of array type declaration, null cannot be passed or is already casted $resolvedParameterType = TypeCombinator::removeNull($resolvedParameterType);