From 9994a5870c7b4f7179b2dea9d4f32ff553e0a4f6 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Wed, 1 Oct 2025 23:17:04 +0700 Subject: [PATCH 1/5] [TypeDeclarationDocblocks] Allow override dummy mixed[] SpacingAwareArrayTypeNode array on UsefulArrayTagNodeAnalyzer --- .../override_dummy_mixed_array.php.inc | 55 +++++++++++++++++++ .../UsefulArrayTagNodeAnalyzer.php | 9 ++- 2 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 rules-tests/TypeDeclarationDocblocks/Rector/Class_/AddReturnDocblockDataProviderRector/Fixture/override_dummy_mixed_array.php.inc diff --git a/rules-tests/TypeDeclarationDocblocks/Rector/Class_/AddReturnDocblockDataProviderRector/Fixture/override_dummy_mixed_array.php.inc b/rules-tests/TypeDeclarationDocblocks/Rector/Class_/AddReturnDocblockDataProviderRector/Fixture/override_dummy_mixed_array.php.inc new file mode 100644 index 00000000000..f40c5d067d2 --- /dev/null +++ b/rules-tests/TypeDeclarationDocblocks/Rector/Class_/AddReturnDocblockDataProviderRector/Fixture/override_dummy_mixed_array.php.inc @@ -0,0 +1,55 @@ + +----- + diff --git a/rules/TypeDeclarationDocblocks/TagNodeAnalyzer/UsefulArrayTagNodeAnalyzer.php b/rules/TypeDeclarationDocblocks/TagNodeAnalyzer/UsefulArrayTagNodeAnalyzer.php index 8f54666886e..b969596161c 100644 --- a/rules/TypeDeclarationDocblocks/TagNodeAnalyzer/UsefulArrayTagNodeAnalyzer.php +++ b/rules/TypeDeclarationDocblocks/TagNodeAnalyzer/UsefulArrayTagNodeAnalyzer.php @@ -8,6 +8,8 @@ use PHPStan\PhpDocParser\Ast\PhpDoc\ReturnTagValueNode; use PHPStan\PhpDocParser\Ast\PhpDoc\VarTagValueNode; use PHPStan\PhpDocParser\Ast\Type\IdentifierTypeNode; +use PHPStan\PhpDocParser\Ast\Type\TypeNode; +use Rector\BetterPhpDocParser\ValueObject\Type\SpacingAwareArrayTypeNode; final class UsefulArrayTagNodeAnalyzer { @@ -19,9 +21,14 @@ public function isUsefulArrayTag(null|ReturnTagValueNode|ParamTagValueNode|VarTa $type = $tagValueNode->type; if (! $type instanceof IdentifierTypeNode) { - return true; + return ! $this->isMixedArray($type); } return $type->name !== 'array'; } + + private function isMixedArray(TypeNode $typeNode): bool + { + return $typeNode instanceof SpacingAwareArrayTypeNode && $typeNode->type instanceof IdentifierTypeNode && $typeNode->type->name === 'mixed'; + } } From c7b12504cfbcc798c60ae49140a395319fbeab81 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Wed, 1 Oct 2025 16:20:31 +0000 Subject: [PATCH 2/5] [ci-review] Rector Rectify --- .../Rector/If_/CompleteMissingIfElseBracketRector.php | 3 ++- .../Rector/String_/StringClassNameToClassConstantRector.php | 2 +- rules/Php70/EregToPcreTransformer.php | 4 ++-- .../Rector/LNumber/AddLiteralSeparatorToNumberRector.php | 2 +- rules/Php81/Rector/Class_/SpatieEnumClassToEnumRector.php | 2 +- .../Rector/Param/AddSensitiveParameterAttributeRector.php | 2 +- .../AddOverrideAttributeToOverriddenMethodsRector.php | 2 +- rules/Strict/Rector/AbstractFalsyScalarRuleFixerRector.php | 2 +- .../Printer/RemoveNodesStartAndEndResolver.php | 2 +- .../ValueObject/PhpDoc/DoctrineAnnotation/CurlyListNode.php | 2 +- src/Caching/ValueObject/CacheItem.php | 2 +- src/Configuration/RectorConfigBuilder.php | 2 +- src/PhpParser/Node/NodeFactory.php | 2 +- src/ValueObject/Error/SystemError.php | 2 +- 14 files changed, 16 insertions(+), 15 deletions(-) diff --git a/rules/CodeQuality/Rector/If_/CompleteMissingIfElseBracketRector.php b/rules/CodeQuality/Rector/If_/CompleteMissingIfElseBracketRector.php index 2a15152e16a..e7c8d4776a3 100644 --- a/rules/CodeQuality/Rector/If_/CompleteMissingIfElseBracketRector.php +++ b/rules/CodeQuality/Rector/If_/CompleteMissingIfElseBracketRector.php @@ -4,6 +4,7 @@ namespace Rector\CodeQuality\Rector\If_; +use PhpParser\Token; use PhpParser\Node; use PhpParser\Node\Stmt; use PhpParser\Node\Stmt\Else_; @@ -79,7 +80,7 @@ public function refactor(Node $node): ?Node } /** - * @param mixed[] $oldTokens + * @param Token[] $oldTokens */ private function isIfConditionFollowedByOpeningCurlyBracket(If_|ElseIf_|Else_ $if, array $oldTokens): bool { diff --git a/rules/Php55/Rector/String_/StringClassNameToClassConstantRector.php b/rules/Php55/Rector/String_/StringClassNameToClassConstantRector.php index e3a8fb81dfd..859d6d21a3c 100644 --- a/rules/Php55/Rector/String_/StringClassNameToClassConstantRector.php +++ b/rules/Php55/Rector/String_/StringClassNameToClassConstantRector.php @@ -147,7 +147,7 @@ public function refactor(Node $node): Concat|ClassConstFetch|null|int } /** - * @param mixed[] $configuration + * @param array $configuration */ public function configure(array $configuration): void { diff --git a/rules/Php70/EregToPcreTransformer.php b/rules/Php70/EregToPcreTransformer.php index 88ba0af813e..6b2a48deaa6 100644 --- a/rules/Php70/EregToPcreTransformer.php +++ b/rules/Php70/EregToPcreTransformer.php @@ -204,7 +204,7 @@ private function normalize(string $content, bool $normalizeUnprintableChar): str } /** - * @param mixed[] $r + * @param array $r */ private function processBracket(string $content, int $i, int $l, array &$r, int $rr): int { @@ -284,7 +284,7 @@ private function _ere2pcre_escape(string $content): string } /** - * @param mixed[] $r + * @param array $r */ private function processCurlyBracket(string $s, int $i, array &$r, int $rr): int { diff --git a/rules/Php74/Rector/LNumber/AddLiteralSeparatorToNumberRector.php b/rules/Php74/Rector/LNumber/AddLiteralSeparatorToNumberRector.php index 3055a259aa0..e36597b6326 100644 --- a/rules/Php74/Rector/LNumber/AddLiteralSeparatorToNumberRector.php +++ b/rules/Php74/Rector/LNumber/AddLiteralSeparatorToNumberRector.php @@ -44,7 +44,7 @@ final class AddLiteralSeparatorToNumberRector extends AbstractRector implements private int $limitValue = self::DEFAULT_LIMIT_VALUE; /** - * @param mixed[] $configuration + * @param array $configuration */ public function configure(array $configuration): void { diff --git a/rules/Php81/Rector/Class_/SpatieEnumClassToEnumRector.php b/rules/Php81/Rector/Class_/SpatieEnumClassToEnumRector.php index 5e3de25c541..921a628a9c1 100644 --- a/rules/Php81/Rector/Class_/SpatieEnumClassToEnumRector.php +++ b/rules/Php81/Rector/Class_/SpatieEnumClassToEnumRector.php @@ -93,7 +93,7 @@ public function refactor(Node $node): ?Enum_ } /** - * @param mixed[] $configuration + * @param array $configuration */ public function configure(array $configuration): void { diff --git a/rules/Php82/Rector/Param/AddSensitiveParameterAttributeRector.php b/rules/Php82/Rector/Param/AddSensitiveParameterAttributeRector.php index fd39705fbdb..e3e0c681933 100644 --- a/rules/Php82/Rector/Param/AddSensitiveParameterAttributeRector.php +++ b/rules/Php82/Rector/Param/AddSensitiveParameterAttributeRector.php @@ -36,7 +36,7 @@ public function __construct( } /** - * @param mixed[] $configuration + * @param array $configuration */ public function configure(array $configuration): void { diff --git a/rules/Php83/Rector/ClassMethod/AddOverrideAttributeToOverriddenMethodsRector.php b/rules/Php83/Rector/ClassMethod/AddOverrideAttributeToOverriddenMethodsRector.php index 88e7f24c2c7..6855933ca0c 100644 --- a/rules/Php83/Rector/ClassMethod/AddOverrideAttributeToOverriddenMethodsRector.php +++ b/rules/Php83/Rector/ClassMethod/AddOverrideAttributeToOverriddenMethodsRector.php @@ -121,7 +121,7 @@ public function getNodeTypes(): array } /** - * @param mixed[] $configuration + * @param array $configuration */ public function configure(array $configuration): void { diff --git a/rules/Strict/Rector/AbstractFalsyScalarRuleFixerRector.php b/rules/Strict/Rector/AbstractFalsyScalarRuleFixerRector.php index 72509ce12a0..742da71d056 100644 --- a/rules/Strict/Rector/AbstractFalsyScalarRuleFixerRector.php +++ b/rules/Strict/Rector/AbstractFalsyScalarRuleFixerRector.php @@ -24,7 +24,7 @@ abstract class AbstractFalsyScalarRuleFixerRector extends AbstractRector impleme protected bool $treatAsNonEmpty = false; /** - * @param mixed[] $configuration + * @param array $configuration */ public function configure(array $configuration): void { diff --git a/src/BetterPhpDocParser/Printer/RemoveNodesStartAndEndResolver.php b/src/BetterPhpDocParser/Printer/RemoveNodesStartAndEndResolver.php index 5b0b0666983..bab55bc40b4 100644 --- a/src/BetterPhpDocParser/Printer/RemoveNodesStartAndEndResolver.php +++ b/src/BetterPhpDocParser/Printer/RemoveNodesStartAndEndResolver.php @@ -13,7 +13,7 @@ final class RemoveNodesStartAndEndResolver { /** - * @param mixed[] $tokens + * @param array $tokens * @return StartAndEnd[] */ public function resolve(PhpDocNode $originalPhpDocNode, PhpDocNode $currentPhpDocNode, array $tokens): array diff --git a/src/BetterPhpDocParser/ValueObject/PhpDoc/DoctrineAnnotation/CurlyListNode.php b/src/BetterPhpDocParser/ValueObject/PhpDoc/DoctrineAnnotation/CurlyListNode.php index a8c3c9bdf54..233578cb552 100644 --- a/src/BetterPhpDocParser/ValueObject/PhpDoc/DoctrineAnnotation/CurlyListNode.php +++ b/src/BetterPhpDocParser/ValueObject/PhpDoc/DoctrineAnnotation/CurlyListNode.php @@ -27,7 +27,7 @@ public function __toString(): string } /** - * @param mixed[] $array + * @param ArrayItemNode[] $array */ private function implode(array $array): string { diff --git a/src/Caching/ValueObject/CacheItem.php b/src/Caching/ValueObject/CacheItem.php index d1d5dd9614a..f344bd82b72 100644 --- a/src/Caching/ValueObject/CacheItem.php +++ b/src/Caching/ValueObject/CacheItem.php @@ -17,7 +17,7 @@ public function __construct( } /** - * @param mixed[] $properties + * @param array $properties */ public static function __set_state(array $properties): self { diff --git a/src/Configuration/RectorConfigBuilder.php b/src/Configuration/RectorConfigBuilder.php index 13e5e3b2512..fe236011d7e 100644 --- a/src/Configuration/RectorConfigBuilder.php +++ b/src/Configuration/RectorConfigBuilder.php @@ -873,7 +873,7 @@ public function withCache( /** * @param class-string $rectorClass - * @param mixed[] $configuration + * @param AnnotationToAttribute[] $configuration */ public function withConfiguredRule(string $rectorClass, array $configuration): self { diff --git a/src/PhpParser/Node/NodeFactory.php b/src/PhpParser/Node/NodeFactory.php index eba3a7be6a3..9bf90513cc2 100644 --- a/src/PhpParser/Node/NodeFactory.php +++ b/src/PhpParser/Node/NodeFactory.php @@ -117,7 +117,7 @@ public function createArray(array $items): Array_ /** * Creates "($args)" * - * @param mixed[] $values + * @param Node[] $values * @return Arg[] */ public function createArgs(array $values): array diff --git a/src/ValueObject/Error/SystemError.php b/src/ValueObject/Error/SystemError.php index 4722858079f..213dd49e2d1 100644 --- a/src/ValueObject/Error/SystemError.php +++ b/src/ValueObject/Error/SystemError.php @@ -63,7 +63,7 @@ public function jsonSerialize(): array } /** - * @param mixed[] $json + * @param array $json */ public static function decode(array $json): self { From 17215ca877ae951b979bc0eaf2351fda13871302 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Wed, 1 Oct 2025 23:28:49 +0700 Subject: [PATCH 3/5] Revert "[ci-review] Rector Rectify" This reverts commit c7b12504cfbcc798c60ae49140a395319fbeab81. --- .../Rector/If_/CompleteMissingIfElseBracketRector.php | 3 +-- .../Rector/String_/StringClassNameToClassConstantRector.php | 2 +- rules/Php70/EregToPcreTransformer.php | 4 ++-- .../Rector/LNumber/AddLiteralSeparatorToNumberRector.php | 2 +- rules/Php81/Rector/Class_/SpatieEnumClassToEnumRector.php | 2 +- .../Rector/Param/AddSensitiveParameterAttributeRector.php | 2 +- .../AddOverrideAttributeToOverriddenMethodsRector.php | 2 +- rules/Strict/Rector/AbstractFalsyScalarRuleFixerRector.php | 2 +- .../Printer/RemoveNodesStartAndEndResolver.php | 2 +- .../ValueObject/PhpDoc/DoctrineAnnotation/CurlyListNode.php | 2 +- src/Caching/ValueObject/CacheItem.php | 2 +- src/Configuration/RectorConfigBuilder.php | 2 +- src/PhpParser/Node/NodeFactory.php | 2 +- src/ValueObject/Error/SystemError.php | 2 +- 14 files changed, 15 insertions(+), 16 deletions(-) diff --git a/rules/CodeQuality/Rector/If_/CompleteMissingIfElseBracketRector.php b/rules/CodeQuality/Rector/If_/CompleteMissingIfElseBracketRector.php index e7c8d4776a3..2a15152e16a 100644 --- a/rules/CodeQuality/Rector/If_/CompleteMissingIfElseBracketRector.php +++ b/rules/CodeQuality/Rector/If_/CompleteMissingIfElseBracketRector.php @@ -4,7 +4,6 @@ namespace Rector\CodeQuality\Rector\If_; -use PhpParser\Token; use PhpParser\Node; use PhpParser\Node\Stmt; use PhpParser\Node\Stmt\Else_; @@ -80,7 +79,7 @@ public function refactor(Node $node): ?Node } /** - * @param Token[] $oldTokens + * @param mixed[] $oldTokens */ private function isIfConditionFollowedByOpeningCurlyBracket(If_|ElseIf_|Else_ $if, array $oldTokens): bool { diff --git a/rules/Php55/Rector/String_/StringClassNameToClassConstantRector.php b/rules/Php55/Rector/String_/StringClassNameToClassConstantRector.php index 859d6d21a3c..e3a8fb81dfd 100644 --- a/rules/Php55/Rector/String_/StringClassNameToClassConstantRector.php +++ b/rules/Php55/Rector/String_/StringClassNameToClassConstantRector.php @@ -147,7 +147,7 @@ public function refactor(Node $node): Concat|ClassConstFetch|null|int } /** - * @param array $configuration + * @param mixed[] $configuration */ public function configure(array $configuration): void { diff --git a/rules/Php70/EregToPcreTransformer.php b/rules/Php70/EregToPcreTransformer.php index 6b2a48deaa6..88ba0af813e 100644 --- a/rules/Php70/EregToPcreTransformer.php +++ b/rules/Php70/EregToPcreTransformer.php @@ -204,7 +204,7 @@ private function normalize(string $content, bool $normalizeUnprintableChar): str } /** - * @param array $r + * @param mixed[] $r */ private function processBracket(string $content, int $i, int $l, array &$r, int $rr): int { @@ -284,7 +284,7 @@ private function _ere2pcre_escape(string $content): string } /** - * @param array $r + * @param mixed[] $r */ private function processCurlyBracket(string $s, int $i, array &$r, int $rr): int { diff --git a/rules/Php74/Rector/LNumber/AddLiteralSeparatorToNumberRector.php b/rules/Php74/Rector/LNumber/AddLiteralSeparatorToNumberRector.php index e36597b6326..3055a259aa0 100644 --- a/rules/Php74/Rector/LNumber/AddLiteralSeparatorToNumberRector.php +++ b/rules/Php74/Rector/LNumber/AddLiteralSeparatorToNumberRector.php @@ -44,7 +44,7 @@ final class AddLiteralSeparatorToNumberRector extends AbstractRector implements private int $limitValue = self::DEFAULT_LIMIT_VALUE; /** - * @param array $configuration + * @param mixed[] $configuration */ public function configure(array $configuration): void { diff --git a/rules/Php81/Rector/Class_/SpatieEnumClassToEnumRector.php b/rules/Php81/Rector/Class_/SpatieEnumClassToEnumRector.php index 921a628a9c1..5e3de25c541 100644 --- a/rules/Php81/Rector/Class_/SpatieEnumClassToEnumRector.php +++ b/rules/Php81/Rector/Class_/SpatieEnumClassToEnumRector.php @@ -93,7 +93,7 @@ public function refactor(Node $node): ?Enum_ } /** - * @param array $configuration + * @param mixed[] $configuration */ public function configure(array $configuration): void { diff --git a/rules/Php82/Rector/Param/AddSensitiveParameterAttributeRector.php b/rules/Php82/Rector/Param/AddSensitiveParameterAttributeRector.php index e3e0c681933..fd39705fbdb 100644 --- a/rules/Php82/Rector/Param/AddSensitiveParameterAttributeRector.php +++ b/rules/Php82/Rector/Param/AddSensitiveParameterAttributeRector.php @@ -36,7 +36,7 @@ public function __construct( } /** - * @param array $configuration + * @param mixed[] $configuration */ public function configure(array $configuration): void { diff --git a/rules/Php83/Rector/ClassMethod/AddOverrideAttributeToOverriddenMethodsRector.php b/rules/Php83/Rector/ClassMethod/AddOverrideAttributeToOverriddenMethodsRector.php index 6855933ca0c..88e7f24c2c7 100644 --- a/rules/Php83/Rector/ClassMethod/AddOverrideAttributeToOverriddenMethodsRector.php +++ b/rules/Php83/Rector/ClassMethod/AddOverrideAttributeToOverriddenMethodsRector.php @@ -121,7 +121,7 @@ public function getNodeTypes(): array } /** - * @param array $configuration + * @param mixed[] $configuration */ public function configure(array $configuration): void { diff --git a/rules/Strict/Rector/AbstractFalsyScalarRuleFixerRector.php b/rules/Strict/Rector/AbstractFalsyScalarRuleFixerRector.php index 742da71d056..72509ce12a0 100644 --- a/rules/Strict/Rector/AbstractFalsyScalarRuleFixerRector.php +++ b/rules/Strict/Rector/AbstractFalsyScalarRuleFixerRector.php @@ -24,7 +24,7 @@ abstract class AbstractFalsyScalarRuleFixerRector extends AbstractRector impleme protected bool $treatAsNonEmpty = false; /** - * @param array $configuration + * @param mixed[] $configuration */ public function configure(array $configuration): void { diff --git a/src/BetterPhpDocParser/Printer/RemoveNodesStartAndEndResolver.php b/src/BetterPhpDocParser/Printer/RemoveNodesStartAndEndResolver.php index bab55bc40b4..5b0b0666983 100644 --- a/src/BetterPhpDocParser/Printer/RemoveNodesStartAndEndResolver.php +++ b/src/BetterPhpDocParser/Printer/RemoveNodesStartAndEndResolver.php @@ -13,7 +13,7 @@ final class RemoveNodesStartAndEndResolver { /** - * @param array $tokens + * @param mixed[] $tokens * @return StartAndEnd[] */ public function resolve(PhpDocNode $originalPhpDocNode, PhpDocNode $currentPhpDocNode, array $tokens): array diff --git a/src/BetterPhpDocParser/ValueObject/PhpDoc/DoctrineAnnotation/CurlyListNode.php b/src/BetterPhpDocParser/ValueObject/PhpDoc/DoctrineAnnotation/CurlyListNode.php index 233578cb552..a8c3c9bdf54 100644 --- a/src/BetterPhpDocParser/ValueObject/PhpDoc/DoctrineAnnotation/CurlyListNode.php +++ b/src/BetterPhpDocParser/ValueObject/PhpDoc/DoctrineAnnotation/CurlyListNode.php @@ -27,7 +27,7 @@ public function __toString(): string } /** - * @param ArrayItemNode[] $array + * @param mixed[] $array */ private function implode(array $array): string { diff --git a/src/Caching/ValueObject/CacheItem.php b/src/Caching/ValueObject/CacheItem.php index f344bd82b72..d1d5dd9614a 100644 --- a/src/Caching/ValueObject/CacheItem.php +++ b/src/Caching/ValueObject/CacheItem.php @@ -17,7 +17,7 @@ public function __construct( } /** - * @param array $properties + * @param mixed[] $properties */ public static function __set_state(array $properties): self { diff --git a/src/Configuration/RectorConfigBuilder.php b/src/Configuration/RectorConfigBuilder.php index fe236011d7e..13e5e3b2512 100644 --- a/src/Configuration/RectorConfigBuilder.php +++ b/src/Configuration/RectorConfigBuilder.php @@ -873,7 +873,7 @@ public function withCache( /** * @param class-string $rectorClass - * @param AnnotationToAttribute[] $configuration + * @param mixed[] $configuration */ public function withConfiguredRule(string $rectorClass, array $configuration): self { diff --git a/src/PhpParser/Node/NodeFactory.php b/src/PhpParser/Node/NodeFactory.php index 9bf90513cc2..eba3a7be6a3 100644 --- a/src/PhpParser/Node/NodeFactory.php +++ b/src/PhpParser/Node/NodeFactory.php @@ -117,7 +117,7 @@ public function createArray(array $items): Array_ /** * Creates "($args)" * - * @param Node[] $values + * @param mixed[] $values * @return Arg[] */ public function createArgs(array $values): array diff --git a/src/ValueObject/Error/SystemError.php b/src/ValueObject/Error/SystemError.php index 213dd49e2d1..4722858079f 100644 --- a/src/ValueObject/Error/SystemError.php +++ b/src/ValueObject/Error/SystemError.php @@ -63,7 +63,7 @@ public function jsonSerialize(): array } /** - * @param array $json + * @param mixed[] $json */ public static function decode(array $json): self { From 641bc819c49040ad58ffcfa870a6dc053f4a23aa Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Wed, 1 Oct 2025 23:33:41 +0700 Subject: [PATCH 4/5] skip publc method with mixed[] param on ClassMethodArrayDocblockParamFromLocalCallsRector --- ...erride_dummy_array_mixed_on_public.php.inc | 22 +++++++++++++++++++ ...ArrayDocblockParamFromLocalCallsRector.php | 8 +++++++ .../UsefulArrayTagNodeAnalyzer.php | 2 +- 3 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 rules-tests/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector/Fixture/skip_override_dummy_array_mixed_on_public.php.inc diff --git a/rules-tests/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector/Fixture/skip_override_dummy_array_mixed_on_public.php.inc b/rules-tests/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector/Fixture/skip_override_dummy_array_mixed_on_public.php.inc new file mode 100644 index 00000000000..f24521e0c00 --- /dev/null +++ b/rules-tests/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector/Fixture/skip_override_dummy_array_mixed_on_public.php.inc @@ -0,0 +1,22 @@ +run([2512, 3423]); + + $this->run([324, 534]); + } + + /** + * @param mixed[] $items + */ + public function run(array $items) + { + } +} + +?> diff --git a/rules/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector.php b/rules/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector.php index a71becd6994..3e1749681e2 100644 --- a/rules/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector.php +++ b/rules/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector.php @@ -7,6 +7,7 @@ use PhpParser\Node; use PhpParser\Node\Param; use PhpParser\Node\Stmt\Class_; +use PHPStan\PhpDocParser\Ast\PhpDoc\ParamTagValueNode; use PHPStan\Type\Type; use PHPStan\Type\TypeCombinator; use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory; @@ -106,6 +107,13 @@ public function refactor(Node $node): ?Node continue; } + if ($parameterTagValueNode instanceof ParamTagValueNode + && $classMethod->isPublic() && + $this->usefulArrayTagNodeAnalyzer->isMixedArray($parameterTagValueNode->type)) { + // on public method, skip if there is mixed[], as caller can be anything + continue; + } + $resolvedParameterType = $classMethodParameterTypes[$parameterPosition] ?? $classMethodParameterTypes[$parameterName] ?? null; if (! $resolvedParameterType instanceof Type) { continue; diff --git a/rules/TypeDeclarationDocblocks/TagNodeAnalyzer/UsefulArrayTagNodeAnalyzer.php b/rules/TypeDeclarationDocblocks/TagNodeAnalyzer/UsefulArrayTagNodeAnalyzer.php index b969596161c..e52def88f7c 100644 --- a/rules/TypeDeclarationDocblocks/TagNodeAnalyzer/UsefulArrayTagNodeAnalyzer.php +++ b/rules/TypeDeclarationDocblocks/TagNodeAnalyzer/UsefulArrayTagNodeAnalyzer.php @@ -27,7 +27,7 @@ public function isUsefulArrayTag(null|ReturnTagValueNode|ParamTagValueNode|VarTa return $type->name !== 'array'; } - private function isMixedArray(TypeNode $typeNode): bool + public function isMixedArray(TypeNode $typeNode): bool { return $typeNode instanceof SpacingAwareArrayTypeNode && $typeNode->type instanceof IdentifierTypeNode && $typeNode->type->name === 'mixed'; } From c96f5332e5d9cc6545990c7031195562449c5e66 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Wed, 1 Oct 2025 16:36:21 +0000 Subject: [PATCH 5/5] [ci-review] Rector Rectify --- .../Rector/If_/CompleteMissingIfElseBracketRector.php | 3 ++- .../Rector/String_/StringClassNameToClassConstantRector.php | 2 +- rules/Php70/EregToPcreTransformer.php | 4 ++-- .../Rector/LNumber/AddLiteralSeparatorToNumberRector.php | 2 +- rules/Php81/Rector/Class_/SpatieEnumClassToEnumRector.php | 2 +- .../Rector/Param/AddSensitiveParameterAttributeRector.php | 2 +- .../AddOverrideAttributeToOverriddenMethodsRector.php | 2 +- rules/Strict/Rector/AbstractFalsyScalarRuleFixerRector.php | 2 +- .../Printer/RemoveNodesStartAndEndResolver.php | 2 +- .../ValueObject/PhpDoc/DoctrineAnnotation/CurlyListNode.php | 2 +- src/Caching/ValueObject/CacheItem.php | 2 +- src/ValueObject/Error/SystemError.php | 2 +- 12 files changed, 14 insertions(+), 13 deletions(-) diff --git a/rules/CodeQuality/Rector/If_/CompleteMissingIfElseBracketRector.php b/rules/CodeQuality/Rector/If_/CompleteMissingIfElseBracketRector.php index 2a15152e16a..e7c8d4776a3 100644 --- a/rules/CodeQuality/Rector/If_/CompleteMissingIfElseBracketRector.php +++ b/rules/CodeQuality/Rector/If_/CompleteMissingIfElseBracketRector.php @@ -4,6 +4,7 @@ namespace Rector\CodeQuality\Rector\If_; +use PhpParser\Token; use PhpParser\Node; use PhpParser\Node\Stmt; use PhpParser\Node\Stmt\Else_; @@ -79,7 +80,7 @@ public function refactor(Node $node): ?Node } /** - * @param mixed[] $oldTokens + * @param Token[] $oldTokens */ private function isIfConditionFollowedByOpeningCurlyBracket(If_|ElseIf_|Else_ $if, array $oldTokens): bool { diff --git a/rules/Php55/Rector/String_/StringClassNameToClassConstantRector.php b/rules/Php55/Rector/String_/StringClassNameToClassConstantRector.php index e3a8fb81dfd..859d6d21a3c 100644 --- a/rules/Php55/Rector/String_/StringClassNameToClassConstantRector.php +++ b/rules/Php55/Rector/String_/StringClassNameToClassConstantRector.php @@ -147,7 +147,7 @@ public function refactor(Node $node): Concat|ClassConstFetch|null|int } /** - * @param mixed[] $configuration + * @param array $configuration */ public function configure(array $configuration): void { diff --git a/rules/Php70/EregToPcreTransformer.php b/rules/Php70/EregToPcreTransformer.php index 88ba0af813e..6b2a48deaa6 100644 --- a/rules/Php70/EregToPcreTransformer.php +++ b/rules/Php70/EregToPcreTransformer.php @@ -204,7 +204,7 @@ private function normalize(string $content, bool $normalizeUnprintableChar): str } /** - * @param mixed[] $r + * @param array $r */ private function processBracket(string $content, int $i, int $l, array &$r, int $rr): int { @@ -284,7 +284,7 @@ private function _ere2pcre_escape(string $content): string } /** - * @param mixed[] $r + * @param array $r */ private function processCurlyBracket(string $s, int $i, array &$r, int $rr): int { diff --git a/rules/Php74/Rector/LNumber/AddLiteralSeparatorToNumberRector.php b/rules/Php74/Rector/LNumber/AddLiteralSeparatorToNumberRector.php index 3055a259aa0..e36597b6326 100644 --- a/rules/Php74/Rector/LNumber/AddLiteralSeparatorToNumberRector.php +++ b/rules/Php74/Rector/LNumber/AddLiteralSeparatorToNumberRector.php @@ -44,7 +44,7 @@ final class AddLiteralSeparatorToNumberRector extends AbstractRector implements private int $limitValue = self::DEFAULT_LIMIT_VALUE; /** - * @param mixed[] $configuration + * @param array $configuration */ public function configure(array $configuration): void { diff --git a/rules/Php81/Rector/Class_/SpatieEnumClassToEnumRector.php b/rules/Php81/Rector/Class_/SpatieEnumClassToEnumRector.php index 5e3de25c541..921a628a9c1 100644 --- a/rules/Php81/Rector/Class_/SpatieEnumClassToEnumRector.php +++ b/rules/Php81/Rector/Class_/SpatieEnumClassToEnumRector.php @@ -93,7 +93,7 @@ public function refactor(Node $node): ?Enum_ } /** - * @param mixed[] $configuration + * @param array $configuration */ public function configure(array $configuration): void { diff --git a/rules/Php82/Rector/Param/AddSensitiveParameterAttributeRector.php b/rules/Php82/Rector/Param/AddSensitiveParameterAttributeRector.php index fd39705fbdb..e3e0c681933 100644 --- a/rules/Php82/Rector/Param/AddSensitiveParameterAttributeRector.php +++ b/rules/Php82/Rector/Param/AddSensitiveParameterAttributeRector.php @@ -36,7 +36,7 @@ public function __construct( } /** - * @param mixed[] $configuration + * @param array $configuration */ public function configure(array $configuration): void { diff --git a/rules/Php83/Rector/ClassMethod/AddOverrideAttributeToOverriddenMethodsRector.php b/rules/Php83/Rector/ClassMethod/AddOverrideAttributeToOverriddenMethodsRector.php index 88e7f24c2c7..6855933ca0c 100644 --- a/rules/Php83/Rector/ClassMethod/AddOverrideAttributeToOverriddenMethodsRector.php +++ b/rules/Php83/Rector/ClassMethod/AddOverrideAttributeToOverriddenMethodsRector.php @@ -121,7 +121,7 @@ public function getNodeTypes(): array } /** - * @param mixed[] $configuration + * @param array $configuration */ public function configure(array $configuration): void { diff --git a/rules/Strict/Rector/AbstractFalsyScalarRuleFixerRector.php b/rules/Strict/Rector/AbstractFalsyScalarRuleFixerRector.php index 72509ce12a0..742da71d056 100644 --- a/rules/Strict/Rector/AbstractFalsyScalarRuleFixerRector.php +++ b/rules/Strict/Rector/AbstractFalsyScalarRuleFixerRector.php @@ -24,7 +24,7 @@ abstract class AbstractFalsyScalarRuleFixerRector extends AbstractRector impleme protected bool $treatAsNonEmpty = false; /** - * @param mixed[] $configuration + * @param array $configuration */ public function configure(array $configuration): void { diff --git a/src/BetterPhpDocParser/Printer/RemoveNodesStartAndEndResolver.php b/src/BetterPhpDocParser/Printer/RemoveNodesStartAndEndResolver.php index 5b0b0666983..bab55bc40b4 100644 --- a/src/BetterPhpDocParser/Printer/RemoveNodesStartAndEndResolver.php +++ b/src/BetterPhpDocParser/Printer/RemoveNodesStartAndEndResolver.php @@ -13,7 +13,7 @@ final class RemoveNodesStartAndEndResolver { /** - * @param mixed[] $tokens + * @param array $tokens * @return StartAndEnd[] */ public function resolve(PhpDocNode $originalPhpDocNode, PhpDocNode $currentPhpDocNode, array $tokens): array diff --git a/src/BetterPhpDocParser/ValueObject/PhpDoc/DoctrineAnnotation/CurlyListNode.php b/src/BetterPhpDocParser/ValueObject/PhpDoc/DoctrineAnnotation/CurlyListNode.php index a8c3c9bdf54..233578cb552 100644 --- a/src/BetterPhpDocParser/ValueObject/PhpDoc/DoctrineAnnotation/CurlyListNode.php +++ b/src/BetterPhpDocParser/ValueObject/PhpDoc/DoctrineAnnotation/CurlyListNode.php @@ -27,7 +27,7 @@ public function __toString(): string } /** - * @param mixed[] $array + * @param ArrayItemNode[] $array */ private function implode(array $array): string { diff --git a/src/Caching/ValueObject/CacheItem.php b/src/Caching/ValueObject/CacheItem.php index d1d5dd9614a..f344bd82b72 100644 --- a/src/Caching/ValueObject/CacheItem.php +++ b/src/Caching/ValueObject/CacheItem.php @@ -17,7 +17,7 @@ public function __construct( } /** - * @param mixed[] $properties + * @param array $properties */ public static function __set_state(array $properties): self { diff --git a/src/ValueObject/Error/SystemError.php b/src/ValueObject/Error/SystemError.php index 4722858079f..213dd49e2d1 100644 --- a/src/ValueObject/Error/SystemError.php +++ b/src/ValueObject/Error/SystemError.php @@ -63,7 +63,7 @@ public function jsonSerialize(): array } /** - * @param mixed[] $json + * @param array $json */ public static function decode(array $json): self {