diff --git a/rules-tests/PHPUnit100/Rector/Class_/RemoveNamedArgsInDataProviderRector/Fixture/provide_data_with_multiple_yields.php.inc b/rules-tests/PHPUnit100/Rector/Class_/RemoveNamedArgsInDataProviderRector/Fixture/provide_data_with_multiple_yields.php.inc new file mode 100644 index 00000000..868ca845 --- /dev/null +++ b/rules-tests/PHPUnit100/Rector/Class_/RemoveNamedArgsInDataProviderRector/Fixture/provide_data_with_multiple_yields.php.inc @@ -0,0 +1,49 @@ + 100, 'another' => 'arg1']; + yield ['secondNamedArg' => 27, 'theOther' => 'arg2']; + yield [3.2 => 32, 'nonOfOne' => 3]; + } +} + +?> +----- + diff --git a/rules-tests/PHPUnit100/Rector/Class_/RemoveNamedArgsInDataProviderRector/Fixture/provide_data_with_named_and_not_named_args.php.inc b/rules-tests/PHPUnit100/Rector/Class_/RemoveNamedArgsInDataProviderRector/Fixture/provide_data_with_named_and_not_named_args.php.inc new file mode 100644 index 00000000..5a7e5586 --- /dev/null +++ b/rules-tests/PHPUnit100/Rector/Class_/RemoveNamedArgsInDataProviderRector/Fixture/provide_data_with_named_and_not_named_args.php.inc @@ -0,0 +1,45 @@ + 100, null]; + } +} + +?> +----- + diff --git a/rules-tests/PHPUnit100/Rector/Class_/RemoveNamedArgsInDataProviderRector/Fixture/provide_data_with_named_args.php.inc b/rules-tests/PHPUnit100/Rector/Class_/RemoveNamedArgsInDataProviderRector/Fixture/provide_data_with_named_args.php.inc new file mode 100644 index 00000000..048ccbe1 --- /dev/null +++ b/rules-tests/PHPUnit100/Rector/Class_/RemoveNamedArgsInDataProviderRector/Fixture/provide_data_with_named_args.php.inc @@ -0,0 +1,45 @@ + 100, 'another' => 'arg1']; + } +} + +?> +----- + diff --git a/rules-tests/PHPUnit100/Rector/Class_/RemoveNamedArgsInDataProviderRector/Fixture/provide_data_with_no_named_args.php.inc b/rules-tests/PHPUnit100/Rector/Class_/RemoveNamedArgsInDataProviderRector/Fixture/provide_data_with_no_named_args.php.inc new file mode 100644 index 00000000..dc24ec41 --- /dev/null +++ b/rules-tests/PHPUnit100/Rector/Class_/RemoveNamedArgsInDataProviderRector/Fixture/provide_data_with_no_named_args.php.inc @@ -0,0 +1,45 @@ + +----- + diff --git a/rules-tests/PHPUnit100/Rector/Class_/RemoveNamedArgsInDataProviderRector/Fixture/provide_data_with_return.php.inc b/rules-tests/PHPUnit100/Rector/Class_/RemoveNamedArgsInDataProviderRector/Fixture/provide_data_with_return.php.inc new file mode 100644 index 00000000..7be2287a --- /dev/null +++ b/rules-tests/PHPUnit100/Rector/Class_/RemoveNamedArgsInDataProviderRector/Fixture/provide_data_with_return.php.inc @@ -0,0 +1,45 @@ + 100, 'another' => 'arg1']; + } +} + +?> +----- + diff --git a/rules-tests/PHPUnit100/Rector/Class_/RemoveNamedArgsInDataProviderRector/Fixture/provide_data_with_several_named_and_not_named_args.php.inc b/rules-tests/PHPUnit100/Rector/Class_/RemoveNamedArgsInDataProviderRector/Fixture/provide_data_with_several_named_and_not_named_args.php.inc new file mode 100644 index 00000000..224fb178 --- /dev/null +++ b/rules-tests/PHPUnit100/Rector/Class_/RemoveNamedArgsInDataProviderRector/Fixture/provide_data_with_several_named_and_not_named_args.php.inc @@ -0,0 +1,63 @@ + 100, + null, + fn() => 'G-EAZY', + 'Key' => fn() => 'Post Malone', + 'another' => 'arg1', + new \Exception(), + true, + 'false' => false + ]; + } +} + +?> +----- + 'G-EAZY', + fn() => 'Post Malone', + 'arg1', + new \Exception(), + true, + false + ]; + } +} + +?> diff --git a/rules-tests/PHPUnit100/Rector/Class_/RemoveNamedArgsInDataProviderRector/RemoveNamedArgsInDataProviderRectorTest.php b/rules-tests/PHPUnit100/Rector/Class_/RemoveNamedArgsInDataProviderRector/RemoveNamedArgsInDataProviderRectorTest.php new file mode 100644 index 00000000..f88f5947 --- /dev/null +++ b/rules-tests/PHPUnit100/Rector/Class_/RemoveNamedArgsInDataProviderRector/RemoveNamedArgsInDataProviderRectorTest.php @@ -0,0 +1,28 @@ +doTestFile($filePath); + } + + public static function provideData(): Iterator + { + return self::yieldFilesFromDirectory(__DIR__ . '/Fixture'); + } + + public function provideConfigFilePath(): string + { + return __DIR__ . '/config/configured_rule.php'; + } +} diff --git a/rules-tests/PHPUnit100/Rector/Class_/RemoveNamedArgsInDataProviderRector/config/configured_rule.php b/rules-tests/PHPUnit100/Rector/Class_/RemoveNamedArgsInDataProviderRector/config/configured_rule.php new file mode 100644 index 00000000..ca8cce71 --- /dev/null +++ b/rules-tests/PHPUnit100/Rector/Class_/RemoveNamedArgsInDataProviderRector/config/configured_rule.php @@ -0,0 +1,10 @@ +rule(RemoveNamedArgsInDataProviderRector::class); +}; diff --git a/rules/PHPUnit100/Rector/Class_/RemoveNamedArgsInDataProviderRector.php b/rules/PHPUnit100/Rector/Class_/RemoveNamedArgsInDataProviderRector.php new file mode 100644 index 00000000..125fcc7f --- /dev/null +++ b/rules/PHPUnit100/Rector/Class_/RemoveNamedArgsInDataProviderRector.php @@ -0,0 +1,131 @@ + 100]; + } +} +CODE_SAMPLE + + , + <<<'CODE_SAMPLE' +use PHPUnit\Framework\TestCase; + +final class SomeTest extends TestCase +{ + /** + * @dataProvider provideData() + */ + public function test() + { + } + + public static function provideData() + { + yield [100]; + } +} +CODE_SAMPLE + ), + ]); + } + + /** + * @return array> + */ + public function getNodeTypes(): array + { + return [Class_::class]; + } + + /** + * @param Class_ $node + */ + public function refactor(Node $node): ?Node + { + if (! $this->testsNodeAnalyzer->isInTestClass($node)) { + return null; + } + + $hasChanged = false; + + $dataProviders = $this->dataProviderClassMethodFinder->find($node); + foreach ($dataProviders as $dataProvider) { + /** @var Expression $stmt */ + foreach ($dataProvider->getStmts() ?? [] as $stmt) { + $expr = $stmt->expr; + if ($expr instanceof Yield_) { + $this->handleStmt($expr->value); + $hasChanged = true; + } elseif ($expr instanceof Array_) { + $this->handleStmt($expr); + $hasChanged = true; + } + } + } + + if ($hasChanged) { + return $node; + } + + return null; + } + + private function handleStmt(Array_ $array): void + { + foreach ($array->items as $item) { + if (! $item instanceof ArrayItem) { + continue; + } + + if (! $item->key instanceof Int_) { + $item->key = null; + } + } + } +}