Skip to content

Commit 8da5695

Browse files
authored
Test rule registration (#335)
Another option to prevent unregistered rules (see #330). There's one already, and that's the Dead Code Detector (#332 #333), but I think this is quite important to get it right, so adding one more test _never killed nobody_.
2 parents dd7b218 + 7c859d8 commit 8da5695

10 files changed

+53
-4
lines changed

extension.neon

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -441,7 +441,7 @@ services:
441441
- Spaze\PHPStan\Rules\Disallowed\RuleErrors\DisallowedCallsRuleErrors
442442
- Spaze\PHPStan\Rules\Disallowed\RuleErrors\DisallowedVariableRuleErrors
443443
- Spaze\PHPStan\Rules\Disallowed\Type\TypeResolver
444-
- Spaze\PHPStan\Rules\Disallowed\Usages\NamespaceUsageFactory
444+
- Spaze\PHPStan\Rules\Disallowed\UsageFactory\NamespaceUsageFactory
445445
-
446446
factory: Spaze\PHPStan\Rules\Disallowed\Usages\NamespaceUsages(forbiddenNamespaces: %disallowedNamespaces%)
447447
tags:

src/RuleErrors/DisallowedNamespaceRuleErrors.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
use Spaze\PHPStan\Rules\Disallowed\DisallowedNamespace;
1212
use Spaze\PHPStan\Rules\Disallowed\Formatter\Formatter;
1313
use Spaze\PHPStan\Rules\Disallowed\Identifier\Identifier;
14-
use Spaze\PHPStan\Rules\Disallowed\Usages\NamespaceUsage;
14+
use Spaze\PHPStan\Rules\Disallowed\UsageFactory\NamespaceUsage;
1515

1616
class DisallowedNamespaceRuleErrors
1717
{

src/Usages/NamespaceUsage.php renamed to src/UsageFactory/NamespaceUsage.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?php
22
declare(strict_types = 1);
33

4-
namespace Spaze\PHPStan\Rules\Disallowed\Usages;
4+
namespace Spaze\PHPStan\Rules\Disallowed\UsageFactory;
55

66
class NamespaceUsage
77
{

src/Usages/NamespaceUsageFactory.php renamed to src/UsageFactory/NamespaceUsageFactory.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
<?php
22
declare(strict_types = 1);
33

4-
namespace Spaze\PHPStan\Rules\Disallowed\Usages;
4+
namespace Spaze\PHPStan\Rules\Disallowed\UsageFactory;
55

66
use Spaze\PHPStan\Rules\Disallowed\Normalizer\Normalizer;
7+
use Spaze\PHPStan\Rules\Disallowed\UsageFactory\NamespaceUsage;
78

89
class NamespaceUsageFactory
910
{

src/Usages/NamespaceUsages.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
use Spaze\PHPStan\Rules\Disallowed\DisallowedNamespaceFactory;
2323
use Spaze\PHPStan\Rules\Disallowed\RuleErrors\DisallowedNamespaceRuleErrors;
2424
use Spaze\PHPStan\Rules\Disallowed\RuleErrors\ErrorIdentifiers;
25+
use Spaze\PHPStan\Rules\Disallowed\UsageFactory\NamespaceUsageFactory;
2526

2627
/**
2728
* @implements Rule<Node>

tests/AllRulesRegisteredTest.php

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<?php
2+
declare(strict_types = 1);
3+
4+
namespace Spaze\PHPStan\Rules\Disallowed;
5+
6+
use DirectoryIterator;
7+
use PHPStan\Testing\PHPStanTestCase;
8+
9+
class AllRulesRegisteredTest extends PHPStanTestCase
10+
{
11+
12+
private const RULES_DIRS = [
13+
'Calls',
14+
'Usages',
15+
'HelperRules',
16+
];
17+
18+
19+
public function testAllRulesRegistered(): void
20+
{
21+
foreach (self::RULES_DIRS as $directory) {
22+
foreach (new DirectoryIterator(__DIR__ . '/../src/' . $directory) as $file) {
23+
if ($file->getExtension() === 'php') {
24+
$class = sprintf('Spaze\PHPStan\Rules\Disallowed\%s\%s', $directory, $file->getBasename('.php'));
25+
if (!class_exists($class)) {
26+
continue;
27+
}
28+
$services = self::getContainer()->findServiceNamesByType($class);
29+
self::assertNotEmpty($services, "{$class} is not a registered rule");
30+
}
31+
}
32+
}
33+
}
34+
35+
36+
public static function getAdditionalConfigFiles(): array
37+
{
38+
return [
39+
__DIR__ . '/../extension.neon',
40+
];
41+
}
42+
43+
}

tests/Usages/NamespaceUsagesAllowInClassWithAttributesTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
use Spaze\PHPStan\Rules\Disallowed\Allowed\GetAttributesWhenInSignature;
2121
use Spaze\PHPStan\Rules\Disallowed\DisallowedNamespaceFactory;
2222
use Spaze\PHPStan\Rules\Disallowed\RuleErrors\DisallowedNamespaceRuleErrors;
23+
use Spaze\PHPStan\Rules\Disallowed\UsageFactory\NamespaceUsageFactory;
2324

2425
/**
2526
* @extends RuleTestCase<NamespaceUsages>

tests/Usages/NamespaceUsagesExcludeAttributeTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use PHPStan\Testing\RuleTestCase;
88
use Spaze\PHPStan\Rules\Disallowed\DisallowedNamespaceFactory;
99
use Spaze\PHPStan\Rules\Disallowed\RuleErrors\DisallowedNamespaceRuleErrors;
10+
use Spaze\PHPStan\Rules\Disallowed\UsageFactory\NamespaceUsageFactory;
1011

1112
/**
1213
* @extends RuleTestCase<NamespaceUsages>

tests/Usages/NamespaceUsagesTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use PHPStan\Testing\RuleTestCase;
88
use Spaze\PHPStan\Rules\Disallowed\DisallowedNamespaceFactory;
99
use Spaze\PHPStan\Rules\Disallowed\RuleErrors\DisallowedNamespaceRuleErrors;
10+
use Spaze\PHPStan\Rules\Disallowed\UsageFactory\NamespaceUsageFactory;
1011

1112
/**
1213
* @extends RuleTestCase<NamespaceUsages>

tests/Usages/NamespaceUsagesTypesTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
use PHPUnit\Framework\Attributes\RequiresPhp;
99
use Spaze\PHPStan\Rules\Disallowed\DisallowedNamespaceFactory;
1010
use Spaze\PHPStan\Rules\Disallowed\RuleErrors\DisallowedNamespaceRuleErrors;
11+
use Spaze\PHPStan\Rules\Disallowed\UsageFactory\NamespaceUsageFactory;
1112

1213
/**
1314
* @requires PHP >= 8.1

0 commit comments

Comments
 (0)