Skip to content

Commit 58e9068

Browse files
committed
implement CompositeRule
1 parent 89d9d9f commit 58e9068

File tree

3 files changed

+61
-9
lines changed

3 files changed

+61
-9
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?php
2+
3+
namespace PHPStan\Rules;
4+
5+
use PhpParser\Node;
6+
use PHPStan\Analyser\Scope;
7+
8+
class CompositeRule implements Rule {
9+
private DirectRegistry $registry;
10+
11+
public function __construct(DirectRegistry $ruleRegisty) {
12+
$this->registry = $ruleRegisty;
13+
}
14+
15+
16+
public function getNodeType(): string
17+
{
18+
return Node::class;
19+
}
20+
21+
public function processNode(Node $node, Scope $scope): array
22+
{
23+
$errors = [];
24+
25+
$nodeType = get_class($node);
26+
foreach ($this->registry->getRules($nodeType) as $rule) {
27+
foreach ($rule->processNode($node, $scope) as $error) {
28+
$errors[] = $error;
29+
}
30+
}
31+
32+
return $errors;
33+
}
34+
}

tests/Rules/PHPUnit/DataProviderDataRuleTest.php

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,17 @@
22

33
namespace Rules\PHPUnit;
44

5+
use PHPStan\Rules\CompositeRule;
6+
use PHPStan\Rules\DirectRegistry;
7+
use PHPStan\Rules\FunctionCallParametersCheck;
8+
use PHPStan\Rules\Methods\CallMethodsRule;
9+
use PHPStan\Rules\Methods\MethodCallCheck;
10+
use PHPStan\Rules\NullsafeCheck;
11+
use PHPStan\Rules\PhpDoc\UnresolvableTypeHelper;
512
use PHPStan\Rules\PHPUnit\DataProviderDataRule;
13+
use PHPStan\Rules\Properties\PropertyReflectionFinder;
614
use PHPStan\Rules\Rule;
15+
use PHPStan\Rules\RuleLevelHelper;
716
use PHPStan\Testing\RuleTestCase;
817

918
/**
@@ -14,23 +23,32 @@ class DataProviderDataRuleTest extends RuleTestCase
1423

1524
protected function getRule(): Rule
1625
{
17-
$reflection = $this->createReflectionProvider();
26+
$reflectionProvider = $this->createReflectionProvider();
1827

19-
return new DataProviderDataRule(
20-
$reflection
21-
);
28+
$ruleLevelHelper = new RuleLevelHelper($reflectionProvider, true, false, true, true, false, false, true);
29+
30+
31+
return new CompositeRule(new DirectRegistry([
32+
new DataProviderDataRule(
33+
$reflectionProvider
34+
),
35+
new CallMethodsRule(
36+
new MethodCallCheck($reflectionProvider, $ruleLevelHelper, true, true),
37+
new FunctionCallParametersCheck($ruleLevelHelper, new NullsafeCheck(), new UnresolvableTypeHelper(), new PropertyReflectionFinder(), true, true, true, true),
38+
)
39+
]));
2240
}
2341

2442
public function testRule(): void
2543
{
2644
$this->analyse([__DIR__ . '/data/data-provider-data.php'], [
2745
[
28-
'Parameter #2 $input of method test::testTrim() expects string, int given.',
29-
25,
46+
'Parameter #2 $input of method DataProviderDataTest\FooTest::testTrim() expects string, int given.',
47+
23,
3048
],
3149
[
32-
'Parameter #2 $input of method test::testTrim() expects string, false given.',
33-
29,
50+
'Parameter #2 $input of method DataProviderDataTest\FooTest::testTrim() expects string, false given.',
51+
27,
3452
],
3553
]);
3654
}

tests/Rules/PHPUnit/data/data-provider-data.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public function testTrim(string $expectedResult, string $input): void
1313
{
1414
}
1515

16-
public function aProvider(): array /** @phpstan-ignore missingType.iterableValue */
16+
public function aProvider(): array
1717
{
1818
return [
1919
[

0 commit comments

Comments
 (0)