From 013e86e0ec0acd29e1790ea547b230a7c700bc9e Mon Sep 17 00:00:00 2001 From: Markus Staab Date: Thu, 12 Nov 2026 17:42:18 +0100 Subject: [PATCH 1/2] Improve EmptyDataProviderRule --- src/Rules/PHPUnit/EmptyDataProviderRule.php | 8 +------ .../PHPUnit/EmptyDataProviderRuleTest.php | 8 +++++++ .../PHPUnit/data/empty-data-provider.php | 22 +++++++++++++++++++ 3 files changed, 31 insertions(+), 7 deletions(-) diff --git a/src/Rules/PHPUnit/EmptyDataProviderRule.php b/src/Rules/PHPUnit/EmptyDataProviderRule.php index a0511272..f9ac67b4 100644 --- a/src/Rules/PHPUnit/EmptyDataProviderRule.php +++ b/src/Rules/PHPUnit/EmptyDataProviderRule.php @@ -41,12 +41,6 @@ public function getNodeType(): string public function processNode(Node $node, Scope $scope): array { - // A generator yields its data sets one at a time, so whether it provides - // any depends on control flow this rule cannot decide. - if ($node->isGenerator()) { - return []; - } - $returnStatements = $node->getReturnStatements(); if ($returnStatements === []) { return []; @@ -63,7 +57,7 @@ public function processNode(Node $node, Scope $scope): array foreach ($returnStatements as $returnStatement) { $returnExpr = $returnStatement->getReturnNode()->expr; if ($returnExpr === null) { - return []; + continue; } $returnType = $returnStatement->getScope()->getType($returnExpr); diff --git a/tests/Rules/PHPUnit/EmptyDataProviderRuleTest.php b/tests/Rules/PHPUnit/EmptyDataProviderRuleTest.php index c06ef571..4fcc238d 100644 --- a/tests/Rules/PHPUnit/EmptyDataProviderRuleTest.php +++ b/tests/Rules/PHPUnit/EmptyDataProviderRuleTest.php @@ -63,6 +63,14 @@ public function testRule(?int $version): void 'Data provider method provideData() provides no data sets, which is an error in PHPUnit 10 and newer.', 158, ]; + $errors[] = [ + 'Data provider method provideData() provides no data sets, which is an error in PHPUnit 10 and newer.', + 190, + ]; + $errors[] = [ + 'Data provider method dataFileAsserts() provides no data sets, which is an error in PHPUnit 10 and newer.', + 310, + ]; } // DataProviderHelper only reads the attribute when the detected major version supports it. diff --git a/tests/Rules/PHPUnit/data/empty-data-provider.php b/tests/Rules/PHPUnit/data/empty-data-provider.php index 4e163497..d6bac347 100644 --- a/tests/Rules/PHPUnit/data/empty-data-provider.php +++ b/tests/Rules/PHPUnit/data/empty-data-provider.php @@ -300,3 +300,25 @@ public static function provideData(bool $flag = false) } } + +class IteratorWithEmptyReturn extends \PHPUnit\Framework\TestCase +{ + + /** + * @return iterable + */ + public function dataFileAsserts(): iterable + { + if (PHP_VERSION_ID >= 80000) { + return []; + } + + yield 1; + yield 2; + } + + /** + * @dataProvider dataFileAsserts + */ + public function testFileAsserts() {} +} From ff664b0b57153ec8a7091cf3479f8ae45524de8f Mon Sep 17 00:00:00 2001 From: Markus Staab Date: Thu, 12 Nov 2026 17:49:17 +0100 Subject: [PATCH 2/2] fix --- src/Rules/PHPUnit/EmptyDataProviderRule.php | 6 ++++++ tests/Rules/PHPUnit/EmptyDataProviderRuleTest.php | 4 ---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/Rules/PHPUnit/EmptyDataProviderRule.php b/src/Rules/PHPUnit/EmptyDataProviderRule.php index f9ac67b4..ac01dd3f 100644 --- a/src/Rules/PHPUnit/EmptyDataProviderRule.php +++ b/src/Rules/PHPUnit/EmptyDataProviderRule.php @@ -41,6 +41,12 @@ public function getNodeType(): string public function processNode(Node $node, Scope $scope): array { + // A generator yields its data sets one at a time, so whether it provides + // any depends on control flow this rule cannot decide. + if ($node->isGenerator()) { + return []; + } + $returnStatements = $node->getReturnStatements(); if ($returnStatements === []) { return []; diff --git a/tests/Rules/PHPUnit/EmptyDataProviderRuleTest.php b/tests/Rules/PHPUnit/EmptyDataProviderRuleTest.php index 4fcc238d..c3d90bfe 100644 --- a/tests/Rules/PHPUnit/EmptyDataProviderRuleTest.php +++ b/tests/Rules/PHPUnit/EmptyDataProviderRuleTest.php @@ -67,10 +67,6 @@ public function testRule(?int $version): void 'Data provider method provideData() provides no data sets, which is an error in PHPUnit 10 and newer.', 190, ]; - $errors[] = [ - 'Data provider method dataFileAsserts() provides no data sets, which is an error in PHPUnit 10 and newer.', - 310, - ]; } // DataProviderHelper only reads the attribute when the detected major version supports it.