Create a rule to annotate a data provider (PHPUnit) with correct array based the test method signature that uses the data provider
Feature Request
I would like a Rector to add the correct return type docblock to a PHPUnit data provider method, based on the signature of the test method that references the data provider.
Rector would look for methods with the #[DataProvicder] attribute, it could then annotate the referenced data provider method, if it isn't already annotated, with relevant docblock,
E.g Before
final class NumericDataSetsTest extends TestCase
{
public static function additionProvider(): array
{
return [
[0, 0, 0],
[0, 1, 1],
[1, 0, 1],
[1, 1, 3],
];
}
#[DataProvider('additionProvider')]
public function testAdd(int $a, int $b, int $expected): void
{
$this->assertSame($expected, $a + $b);
}
}
Rector can work out from the testAdd parameters that the data provider should be:
/** @return array<array-key,array<int,int,int>> */
Diff
final class NumericDataSetsTest extends TestCase
{
+ /** @return array<array-key,array<int,int,int>> */
public static function additionProvider(): array
{
return [
[0, 0, 0],
[0, 1, 1],
[1, 0, 1],
[1, 1, 3],
];
}
#[DataProvider('additionProvider')]
public function testAdd(int $a, int $b, int $expected): void
{
$this->assertSame($expected, $a + $b);
}
}
@DaveLiddament I guess it shoud be @return ?
@DaveLiddament I guess it shoud be
@return?
Good spot. Updated. Thanks
We had such a rule before but it was opinionated how complex array shapes should be included or skipped.
Proof of concept would be great 👍
Closing as accepted to avoid keep issue tracker focus on unclear issues that needs our attention.
Feel free to kick of with a proof of concept PR 👍
https://github.com/rectorphp/rector-phpunit would be best to target