diff --git a/rules-tests/PHPUnit110/Rector/Class_/NamedArgumentForDataProviderRector/Fixture/skip_optional_args.php.inc b/rules-tests/PHPUnit110/Rector/Class_/NamedArgumentForDataProviderRector/Fixture/skip_optional_args.php.inc new file mode 100644 index 00000000..9191cfc2 --- /dev/null +++ b/rules-tests/PHPUnit110/Rector/Class_/NamedArgumentForDataProviderRector/Fixture/skip_optional_args.php.inc @@ -0,0 +1,45 @@ + false, + 'keyC' => true, + ]; + } + + #[\PHPUnit\Framework\Attributes\DataProvider('dataProvider')] + public function testFilter(bool $keyA, bool $keyB = false, bool $keyC = false): void + { + } +} +?> +----- + false, + 'keyC' => true, + ]; + } + + #[\PHPUnit\Framework\Attributes\DataProvider('dataProvider')] + public function testFilter(bool $keyA, bool $keyB = false, bool $keyC = false): void + { + } +} +?> diff --git a/rules/PHPUnit110/Rector/Class_/NamedArgumentForDataProviderRector.php b/rules/PHPUnit110/Rector/Class_/NamedArgumentForDataProviderRector.php index 47d13c12..d8cff038 100644 --- a/rules/PHPUnit110/Rector/Class_/NamedArgumentForDataProviderRector.php +++ b/rules/PHPUnit110/Rector/Class_/NamedArgumentForDataProviderRector.php @@ -239,6 +239,11 @@ private function refactorArrayKey(Array_ $array, array $dataProviderNameMapping) return false; } + // Skip already named arguments - optional parameters can be left out + if ($allArrayKeyNames !== [] && array_diff($allArrayKeyNames, $dataProviderNameMapping) === []) { + return false; + } + foreach ($array->items as $arrayIndex => $arrayItem) { if (! isset($dataProviderNameMapping[$arrayIndex])) { continue;