From 6739b74b9978eefad686e23178795edd763e545d Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Tue, 16 Sep 2025 20:58:10 +0700 Subject: [PATCH 1/2] [TypeDeclarationDocblocks] Handle already return typed \Generator on AddReturnDocblockDataProviderRector --- .../already_return_typed_generator.php.inc | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 rules-tests/TypeDeclarationDocblocks/Rector/Class_/AddReturnDocblockDataProviderRector/Fixture/already_return_typed_generator.php.inc diff --git a/rules-tests/TypeDeclarationDocblocks/Rector/Class_/AddReturnDocblockDataProviderRector/Fixture/already_return_typed_generator.php.inc b/rules-tests/TypeDeclarationDocblocks/Rector/Class_/AddReturnDocblockDataProviderRector/Fixture/already_return_typed_generator.php.inc new file mode 100644 index 00000000000..647710a4407 --- /dev/null +++ b/rules-tests/TypeDeclarationDocblocks/Rector/Class_/AddReturnDocblockDataProviderRector/Fixture/already_return_typed_generator.php.inc @@ -0,0 +1,48 @@ + +----- +> + */ + public static function provideData(): \Generator + { + yield ['data1', 'data2']; + yield ['item4', 'item5']; + } +} + +?> From 0ff0d6fd7fbfb5ff52cb2c9200e09f10b761377c Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Tue, 16 Sep 2025 21:01:13 +0700 Subject: [PATCH 2/2] Fix --- .../Rector/Class_/AddReturnDocblockDataProviderRector.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rules/TypeDeclarationDocblocks/Rector/Class_/AddReturnDocblockDataProviderRector.php b/rules/TypeDeclarationDocblocks/Rector/Class_/AddReturnDocblockDataProviderRector.php index 19c3ac93acf..6ff34c31698 100644 --- a/rules/TypeDeclarationDocblocks/Rector/Class_/AddReturnDocblockDataProviderRector.php +++ b/rules/TypeDeclarationDocblocks/Rector/Class_/AddReturnDocblockDataProviderRector.php @@ -154,7 +154,7 @@ public function refactor(Node $node): ?Node if ($yields !== []) { $yieldType = $this->yieldTypeResolver->resolveFromYieldNodes($yields, $dataProviderClassMethod); - if ($yieldType instanceof FullyQualifiedGenericObjectType && $yieldType->getClassName() === 'Generator') { + if ($yieldType instanceof FullyQualifiedGenericObjectType && $yieldType->getClassName() === 'Generator' && ! $dataProviderClassMethod->returnType instanceof Node) { // most likely, a static iterator is used in data test fixtures $yieldType = new FullyQualifiedGenericObjectType('Iterator', $yieldType->getTypes()); }