Skip to content

Commit 76dc419

Browse files
authored
[TypeDeclarationDocblocks] Handle already return typed \Generator on AddReturnDocblockDataProviderRector (rectorphp#7297)
* [TypeDeclarationDocblocks] Handle already return typed \Generator on AddReturnDocblockDataProviderRector * Fix
1 parent 317ba55 commit 76dc419

2 files changed

Lines changed: 49 additions & 1 deletion

File tree

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
<?php
2+
3+
namespace Rector\Tests\TypeDeclarationDocblocks\Rector\Class_\AddReturnDocblockDataProviderRector\Fixture;
4+
5+
use PHPUnit\Framework\Attributes\DataProvider;
6+
use PHPUnit\Framework\TestCase;
7+
8+
final class AlreadyReturnTypedGenerator extends TestCase
9+
{
10+
#[DataProvider('provideData')]
11+
public function testSomething()
12+
{
13+
}
14+
15+
public static function provideData(): \Generator
16+
{
17+
yield ['data1', 'data2'];
18+
yield ['item4', 'item5'];
19+
}
20+
}
21+
22+
?>
23+
-----
24+
<?php
25+
26+
namespace Rector\Tests\TypeDeclarationDocblocks\Rector\Class_\AddReturnDocblockDataProviderRector\Fixture;
27+
28+
use PHPUnit\Framework\Attributes\DataProvider;
29+
use PHPUnit\Framework\TestCase;
30+
31+
final class AlreadyReturnTypedGenerator extends TestCase
32+
{
33+
#[DataProvider('provideData')]
34+
public function testSomething()
35+
{
36+
}
37+
38+
/**
39+
* @return \Generator<array<int, string>>
40+
*/
41+
public static function provideData(): \Generator
42+
{
43+
yield ['data1', 'data2'];
44+
yield ['item4', 'item5'];
45+
}
46+
}
47+
48+
?>

rules/TypeDeclarationDocblocks/Rector/Class_/AddReturnDocblockDataProviderRector.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ public function refactor(Node $node): ?Node
154154
if ($yields !== []) {
155155
$yieldType = $this->yieldTypeResolver->resolveFromYieldNodes($yields, $dataProviderClassMethod);
156156

157-
if ($yieldType instanceof FullyQualifiedGenericObjectType && $yieldType->getClassName() === 'Generator') {
157+
if ($yieldType instanceof FullyQualifiedGenericObjectType && $yieldType->getClassName() === 'Generator' && ! $dataProviderClassMethod->returnType instanceof Node) {
158158
// most likely, a static iterator is used in data test fixtures
159159
$yieldType = new FullyQualifiedGenericObjectType('Iterator', $yieldType->getTypes());
160160
}

0 commit comments

Comments
 (0)