From f49e0c5abef612162da802559624ac26084ebf83 Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Wed, 2 Sep 2026 16:19:57 +0200 Subject: [PATCH] [TypeDeclarationDocblocks] Only touch private methods in AddParamArrayDocblockFromAssignsParamToParamReferenceRector A by-ref array param type is invariant in PHPStan: narrowing it below array makes every caller passing a plain array fail. For a protected or public method those callers live outside the class and are invisible here, so restrict the rule to private methods. --- .../Fixture/override_dummy_array_param.php.inc | 4 ++-- .../Fixture/skip_dim_fetch_assign_deep.php.inc | 2 +- .../Fixture/skip_multiple_assigns.php.inc | 2 +- .../Fixture/skip_non_private_method.php.inc | 11 +++++++++++ .../Fixture/some_class.php.inc | 4 ++-- ...DocblockFromAssignsParamToParamReferenceRector.php | 9 +++++++-- 6 files changed, 24 insertions(+), 8 deletions(-) create mode 100644 rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/AddParamArrayDocblockFromAssignsParamToParamReferenceRector/Fixture/skip_non_private_method.php.inc diff --git a/rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/AddParamArrayDocblockFromAssignsParamToParamReferenceRector/Fixture/override_dummy_array_param.php.inc b/rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/AddParamArrayDocblockFromAssignsParamToParamReferenceRector/Fixture/override_dummy_array_param.php.inc index 9c26cd1216f..0cf69c874b8 100644 --- a/rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/AddParamArrayDocblockFromAssignsParamToParamReferenceRector/Fixture/override_dummy_array_param.php.inc +++ b/rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/AddParamArrayDocblockFromAssignsParamToParamReferenceRector/Fixture/override_dummy_array_param.php.inc @@ -7,7 +7,7 @@ final class OverrideDummyArrayParam /** * @param array $items */ - public function run(array &$items) + private function run(array &$items) { $items[] = 'John'; } @@ -24,7 +24,7 @@ final class OverrideDummyArrayParam /** * @param string[] $items */ - public function run(array &$items) + private function run(array &$items) { $items[] = 'John'; } diff --git a/rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/AddParamArrayDocblockFromAssignsParamToParamReferenceRector/Fixture/skip_dim_fetch_assign_deep.php.inc b/rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/AddParamArrayDocblockFromAssignsParamToParamReferenceRector/Fixture/skip_dim_fetch_assign_deep.php.inc index 11c8bba2802..4579d0a78fc 100644 --- a/rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/AddParamArrayDocblockFromAssignsParamToParamReferenceRector/Fixture/skip_dim_fetch_assign_deep.php.inc +++ b/rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/AddParamArrayDocblockFromAssignsParamToParamReferenceRector/Fixture/skip_dim_fetch_assign_deep.php.inc @@ -4,7 +4,7 @@ namespace Rector\Tests\TypeDeclarationDocblocks\Rector\ClassMethod\AddParamArray final class SkipDimFetchAssignDeep { - public function run(array &$items) + private function run(array &$items) { $items[][] = 'John'; } diff --git a/rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/AddParamArrayDocblockFromAssignsParamToParamReferenceRector/Fixture/skip_multiple_assigns.php.inc b/rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/AddParamArrayDocblockFromAssignsParamToParamReferenceRector/Fixture/skip_multiple_assigns.php.inc index 864cbcdd14b..2a5c447c7a7 100644 --- a/rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/AddParamArrayDocblockFromAssignsParamToParamReferenceRector/Fixture/skip_multiple_assigns.php.inc +++ b/rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/AddParamArrayDocblockFromAssignsParamToParamReferenceRector/Fixture/skip_multiple_assigns.php.inc @@ -4,7 +4,7 @@ namespace Rector\Tests\TypeDeclarationDocblocks\Rector\ClassMethod\AddParamArray final class SkipMultipleAssigns { - public function run(array &$items) + private function run(array &$items) { $items[] = 'John'; $items[] = 1000; diff --git a/rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/AddParamArrayDocblockFromAssignsParamToParamReferenceRector/Fixture/skip_non_private_method.php.inc b/rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/AddParamArrayDocblockFromAssignsParamToParamReferenceRector/Fixture/skip_non_private_method.php.inc new file mode 100644 index 00000000000..8ec801b5dc8 --- /dev/null +++ b/rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/AddParamArrayDocblockFromAssignsParamToParamReferenceRector/Fixture/skip_non_private_method.php.inc @@ -0,0 +1,11 @@ +isPrivate()) { + return null; + } + $phpDocInfo = $this->phpDocInfoFactory->createFromNodeOrEmpty($node); foreach ($node->getParams() as $param) {