From 584042da7fc89f54ee5922a9bc65e509c99c325b Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Fri, 12 Sep 2025 22:46:10 +0700 Subject: [PATCH 1/4] [TypeDeclarationDocblocks] Avoid array on return empty array on DocblockReturnArrayFromDirectArrayInstanceRector --- .../Fixture/return_empty.php.inc | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/DocblockReturnArrayFromDirectArrayInstanceRector/Fixture/return_empty.php.inc diff --git a/rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/DocblockReturnArrayFromDirectArrayInstanceRector/Fixture/return_empty.php.inc b/rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/DocblockReturnArrayFromDirectArrayInstanceRector/Fixture/return_empty.php.inc new file mode 100644 index 00000000000..a8e17ea1a11 --- /dev/null +++ b/rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/DocblockReturnArrayFromDirectArrayInstanceRector/Fixture/return_empty.php.inc @@ -0,0 +1,27 @@ + +----- + \ No newline at end of file From 23475c652cf41fca170d9f3c1e579d89975d8a46 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Fri, 12 Sep 2025 22:48:21 +0700 Subject: [PATCH 2/4] return --- .../Fixture/return_empty.php.inc | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/DocblockReturnArrayFromDirectArrayInstanceRector/Fixture/return_empty.php.inc b/rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/DocblockReturnArrayFromDirectArrayInstanceRector/Fixture/return_empty.php.inc index a8e17ea1a11..e32481e7499 100644 --- a/rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/DocblockReturnArrayFromDirectArrayInstanceRector/Fixture/return_empty.php.inc +++ b/rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/DocblockReturnArrayFromDirectArrayInstanceRector/Fixture/return_empty.php.inc @@ -4,7 +4,7 @@ namespace Rector\Tests\TypeDeclarationDocblocks\Rector\ClassMethod\DocblockRetur class ReturnEmpty { - public function run(): array + public function run(): array { return []; } @@ -18,7 +18,10 @@ namespace Rector\Tests\TypeDeclarationDocblocks\Rector\ClassMethod\DocblockRetur class ReturnEmpty { - public function run(): array + /** + * @return mixed[] + */ + public function run(): array { return []; } From f59b59363a2103ce4894e300b69e2320bc462264 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Fri, 12 Sep 2025 22:52:06 +0700 Subject: [PATCH 3/4] fix --- .../Fixture/return_empty.php.inc | 2 +- .../DocblockReturnArrayFromDirectArrayInstanceRector.php | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/DocblockReturnArrayFromDirectArrayInstanceRector/Fixture/return_empty.php.inc b/rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/DocblockReturnArrayFromDirectArrayInstanceRector/Fixture/return_empty.php.inc index e32481e7499..89904edff8c 100644 --- a/rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/DocblockReturnArrayFromDirectArrayInstanceRector/Fixture/return_empty.php.inc +++ b/rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/DocblockReturnArrayFromDirectArrayInstanceRector/Fixture/return_empty.php.inc @@ -19,7 +19,7 @@ namespace Rector\Tests\TypeDeclarationDocblocks\Rector\ClassMethod\DocblockRetur class ReturnEmpty { /** - * @return mixed[] + * @return array */ public function run(): array { diff --git a/rules/TypeDeclarationDocblocks/Rector/ClassMethod/DocblockReturnArrayFromDirectArrayInstanceRector.php b/rules/TypeDeclarationDocblocks/Rector/ClassMethod/DocblockReturnArrayFromDirectArrayInstanceRector.php index f621c68b5c4..d06801ff571 100644 --- a/rules/TypeDeclarationDocblocks/Rector/ClassMethod/DocblockReturnArrayFromDirectArrayInstanceRector.php +++ b/rules/TypeDeclarationDocblocks/Rector/ClassMethod/DocblockReturnArrayFromDirectArrayInstanceRector.php @@ -152,6 +152,10 @@ private function createGenericArrayTypeFromConstantArrayType(ConstantArrayType $ { $genericKeyType = $this->constantToGenericType($constantArrayType->getKeyType()); + if ($constantArrayType->getItemType() instanceof \PHPStan\Type\NeverType) { + $genericKeyType = new IntegerType(); + } + $itemType = $constantArrayType->getItemType(); if ($itemType instanceof ConstantArrayType) { $genericItemType = $this->createGenericArrayTypeFromConstantArrayType($itemType); From d43bb91e8cab99beb1c8d3194ad723f0a4e1b1f7 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Fri, 12 Sep 2025 22:55:55 +0700 Subject: [PATCH 4/4] fix --- .../DocblockReturnArrayFromDirectArrayInstanceRector.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/rules/TypeDeclarationDocblocks/Rector/ClassMethod/DocblockReturnArrayFromDirectArrayInstanceRector.php b/rules/TypeDeclarationDocblocks/Rector/ClassMethod/DocblockReturnArrayFromDirectArrayInstanceRector.php index d06801ff571..5230c2b6140 100644 --- a/rules/TypeDeclarationDocblocks/Rector/ClassMethod/DocblockReturnArrayFromDirectArrayInstanceRector.php +++ b/rules/TypeDeclarationDocblocks/Rector/ClassMethod/DocblockReturnArrayFromDirectArrayInstanceRector.php @@ -17,6 +17,7 @@ use PHPStan\Type\FloatType; use PHPStan\Type\IntegerType; use PHPStan\Type\MixedType; +use PHPStan\Type\NeverType; use PHPStan\Type\StringType; use PHPStan\Type\Type; use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory; @@ -152,8 +153,8 @@ private function createGenericArrayTypeFromConstantArrayType(ConstantArrayType $ { $genericKeyType = $this->constantToGenericType($constantArrayType->getKeyType()); - if ($constantArrayType->getItemType() instanceof \PHPStan\Type\NeverType) { - $genericKeyType = new IntegerType(); + if ($constantArrayType->getItemType() instanceof NeverType) { + $genericKeyType = new IntegerType(); } $itemType = $constantArrayType->getItemType();