Skip to content

Commit

Permalink
Introduce ForbiddenClassNameExtension for append additional forbidden…
Browse files Browse the repository at this point in the history
… class prefixes
  • Loading branch information
kamil-zacek committed Mar 19, 2024
1 parent 9338fdf commit 079cf09
Show file tree
Hide file tree
Showing 44 changed files with 74 additions and 43 deletions.
13 changes: 13 additions & 0 deletions src/Classes/ForbiddenClassNameExtension.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?php declare(strict_types = 1);

namespace PHPStan\Classes;

interface ForbiddenClassNameExtension
{

public const EXTENSION_TAG = 'phpstan.forbiddenClassNamesExtension';

/** @return array<string, string> */
public function getClassPrefixes(): array;

}
20 changes: 19 additions & 1 deletion src/Rules/ClassForbiddenNameCheck.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@

namespace PHPStan\Rules;

use PHPStan\Classes\ForbiddenClassNameExtension;
use PHPStan\DependencyInjection\Container;
use function array_map;
use function array_merge;
use function sprintf;
use function str_starts_with;
use function strpos;
Expand All @@ -16,18 +20,32 @@ class ClassForbiddenNameCheck
'PHP-Scoper' => '_PhpScoper',
];

public function __construct(private Container $container)
{
}

/**
* @param ClassNameNodePair[] $pairs
* @return RuleError[]
*/
public function checkClassNames(array $pairs): array
{
$extensions = $this->container->getServicesByTag(ForbiddenClassNameExtension::EXTENSION_TAG);

$classPrefixes = array_merge(
self::INTERNAL_CLASS_PREFIXES,
...array_map(
static fn (ForbiddenClassNameExtension $extension): array => $extension->getClassPrefixes(),
$extensions,
),
);

$errors = [];
foreach ($pairs as $pair) {
$className = $pair->getClassName();

$projectName = null;
foreach (self::INTERNAL_CLASS_PREFIXES as $project => $prefix) {
foreach ($classPrefixes as $project => $prefix) {
if (str_starts_with($className, $prefix)) {
$projectName = $project;
break;
Expand Down
2 changes: 1 addition & 1 deletion tests/PHPStan/Rules/Classes/ClassAttributesRuleTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ protected function getRule(): Rule
),
new ClassNameCheck(
new ClassCaseSensitivityCheck($reflectionProvider, false),
new ClassForbiddenNameCheck(),
new ClassForbiddenNameCheck(self::getContainer()),
),
true,
),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ protected function getRule(): Rule
),
new ClassNameCheck(
new ClassCaseSensitivityCheck($reflectionProvider, false),
new ClassForbiddenNameCheck(),
new ClassForbiddenNameCheck(self::getContainer()),
),
true,
),
Expand Down
2 changes: 1 addition & 1 deletion tests/PHPStan/Rules/Classes/ClassConstantRuleTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ protected function getRule(): Rule
new RuleLevelHelper($reflectionProvider, true, false, true, false, false, true, false),
new ClassNameCheck(
new ClassCaseSensitivityCheck($reflectionProvider, true),
new ClassForbiddenNameCheck(),
new ClassForbiddenNameCheck(self::getContainer()),
),
new PhpVersion($this->phpVersion),
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ protected function getRule(): Rule
return new ExistingClassInClassExtendsRule(
new ClassNameCheck(
new ClassCaseSensitivityCheck($reflectionProvider, true),
new ClassForbiddenNameCheck(),
new ClassForbiddenNameCheck(self::getContainer()),
),
$reflectionProvider,
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ protected function getRule(): Rule
$reflectionProvider,
new ClassNameCheck(
new ClassCaseSensitivityCheck($reflectionProvider, true),
new ClassForbiddenNameCheck(),
new ClassForbiddenNameCheck(self::getContainer()),
),
true,
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ protected function getRule(): Rule
return new ExistingClassInTraitUseRule(
new ClassNameCheck(
new ClassCaseSensitivityCheck($reflectionProvider, true),
new ClassForbiddenNameCheck(),
new ClassForbiddenNameCheck(self::getContainer()),
),
$reflectionProvider,
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ protected function getRule(): Rule
return new ExistingClassesInClassImplementsRule(
new ClassNameCheck(
new ClassCaseSensitivityCheck($reflectionProvider, true),
new ClassForbiddenNameCheck(),
new ClassForbiddenNameCheck(self::getContainer()),
),
$reflectionProvider,
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ protected function getRule(): Rule
return new ExistingClassesInEnumImplementsRule(
new ClassNameCheck(
new ClassCaseSensitivityCheck($reflectionProvider, true),
new ClassForbiddenNameCheck(),
new ClassForbiddenNameCheck(self::getContainer()),
),
$reflectionProvider,
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ protected function getRule(): Rule
return new ExistingClassesInInterfaceExtendsRule(
new ClassNameCheck(
new ClassCaseSensitivityCheck($reflectionProvider, true),
new ClassForbiddenNameCheck(),
new ClassForbiddenNameCheck(self::getContainer()),
),
$reflectionProvider,
);
Expand Down
2 changes: 1 addition & 1 deletion tests/PHPStan/Rules/Classes/InstantiationRuleTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ protected function getRule(): Rule
new FunctionCallParametersCheck(new RuleLevelHelper($reflectionProvider, true, false, true, false, false, true, false), new NullsafeCheck(), new PhpVersion(80000), new UnresolvableTypeHelper(), new PropertyReflectionFinder(), true, true, true, true, true),
new ClassNameCheck(
new ClassCaseSensitivityCheck($reflectionProvider, true),
new ClassForbiddenNameCheck(),
new ClassForbiddenNameCheck(self::getContainer()),
),
);
}
Expand Down
2 changes: 1 addition & 1 deletion tests/PHPStan/Rules/Classes/MixinRuleTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ protected function getRule(): Rule
$reflectionProvider,
new ClassNameCheck(
new ClassCaseSensitivityCheck($reflectionProvider, true),
new ClassForbiddenNameCheck(),
new ClassForbiddenNameCheck(self::getContainer()),
),
new GenericObjectTypeCheck(),
new MissingTypehintCheck(true, true, true, true, []),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ protected function getRule(): Rule
),
new ClassNameCheck(
new ClassCaseSensitivityCheck($reflectionProvider, false),
new ClassForbiddenNameCheck(),
new ClassForbiddenNameCheck(self::getContainer()),
),
true,
),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ protected function getRule(): Rule
$reflectionProvider,
new ClassNameCheck(
new ClassCaseSensitivityCheck($reflectionProvider, true),
new ClassForbiddenNameCheck(),
new ClassForbiddenNameCheck(self::getContainer()),
),
true,
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ protected function getRule(): Rule
),
new ClassNameCheck(
new ClassCaseSensitivityCheck($reflectionProvider, false),
new ClassForbiddenNameCheck(),
new ClassForbiddenNameCheck(self::getContainer()),
),
true,
),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ protected function getRule(): Rule
),
new ClassNameCheck(
new ClassCaseSensitivityCheck($reflectionProvider, false),
new ClassForbiddenNameCheck(),
new ClassForbiddenNameCheck(self::getContainer()),
),
true,
),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ protected function getRule(): Rule
$reflectionProvider,
new ClassNameCheck(
new ClassCaseSensitivityCheck($reflectionProvider, true),
new ClassForbiddenNameCheck(),
new ClassForbiddenNameCheck(self::getContainer()),
),
new UnresolvableTypeHelper(),
new PhpVersion($this->phpVersionId),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ protected function getRule(): Rule
$reflectionProvider,
new ClassNameCheck(
new ClassCaseSensitivityCheck($reflectionProvider, true),
new ClassForbiddenNameCheck(),
new ClassForbiddenNameCheck(self::getContainer()),
),
new UnresolvableTypeHelper(),
new PhpVersion($this->phpVersionId),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ protected function getRule(): Rule
$reflectionProvider,
new ClassNameCheck(
new ClassCaseSensitivityCheck($reflectionProvider, true),
new ClassForbiddenNameCheck(),
new ClassForbiddenNameCheck(self::getContainer()),
),
new UnresolvableTypeHelper(),
new PhpVersion($this->phpVersionId),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ protected function getRule(): Rule
),
new ClassNameCheck(
new ClassCaseSensitivityCheck($reflectionProvider, false),
new ClassForbiddenNameCheck(),
new ClassForbiddenNameCheck(self::getContainer()),
),
true,
),
Expand Down
2 changes: 1 addition & 1 deletion tests/PHPStan/Rules/Functions/ParamAttributesRuleTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ protected function getRule(): Rule
),
new ClassNameCheck(
new ClassCaseSensitivityCheck($reflectionProvider, false),
new ClassForbiddenNameCheck(),
new ClassForbiddenNameCheck(self::getContainer()),
),
true,
),
Expand Down
2 changes: 1 addition & 1 deletion tests/PHPStan/Rules/Generics/ClassTemplateTypeRuleTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ protected function getRule(): Rule
$reflectionProvider,
new ClassNameCheck(
new ClassCaseSensitivityCheck($reflectionProvider, true),
new ClassForbiddenNameCheck(),
new ClassForbiddenNameCheck(self::getContainer()),
),
new GenericObjectTypeCheck(),
$typeAliasResolver,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ protected function getRule(): Rule
$reflectionProvider,
new ClassNameCheck(
new ClassCaseSensitivityCheck($reflectionProvider, true),
new ClassForbiddenNameCheck(),
new ClassForbiddenNameCheck(self::getContainer()),
),
new GenericObjectTypeCheck(),
$typeAliasResolver,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ protected function getRule(): Rule
$reflectionProvider,
new ClassNameCheck(
new ClassCaseSensitivityCheck($reflectionProvider, true),
new ClassForbiddenNameCheck(),
new ClassForbiddenNameCheck(self::getContainer()),
),
new GenericObjectTypeCheck(),
$typeAliasResolver,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ protected function getRule(): Rule
$reflectionProvider,
new ClassNameCheck(
new ClassCaseSensitivityCheck($reflectionProvider, true),
new ClassForbiddenNameCheck(),
new ClassForbiddenNameCheck(self::getContainer()),
),
new GenericObjectTypeCheck(),
$typeAliasResolver,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ protected function getRule(): Rule
$reflectionProvider,
new ClassNameCheck(
new ClassCaseSensitivityCheck($reflectionProvider, true),
new ClassForbiddenNameCheck(),
new ClassForbiddenNameCheck(self::getContainer()),
),
new GenericObjectTypeCheck(),
$typeAliasResolver,
Expand Down
2 changes: 1 addition & 1 deletion tests/PHPStan/Rules/Generics/TraitTemplateTypeRuleTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ protected function getRule(): Rule
$reflectionProvider,
new ClassNameCheck(
new ClassCaseSensitivityCheck($reflectionProvider, true),
new ClassForbiddenNameCheck(),
new ClassForbiddenNameCheck(self::getContainer()),
),
new GenericObjectTypeCheck(),
$typeAliasResolver,
Expand Down
2 changes: 1 addition & 1 deletion tests/PHPStan/Rules/Methods/CallStaticMethodsRuleTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ protected function getRule(): Rule
$ruleLevelHelper,
new ClassNameCheck(
new ClassCaseSensitivityCheck($reflectionProvider, true),
new ClassForbiddenNameCheck(),
new ClassForbiddenNameCheck(self::getContainer()),
),
true,
true,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ protected function getRule(): Rule
$reflectionProvider,
new ClassNameCheck(
new ClassCaseSensitivityCheck($reflectionProvider, true),
new ClassForbiddenNameCheck(),
new ClassForbiddenNameCheck(self::getContainer()),
),
new UnresolvableTypeHelper(),
new PhpVersion($this->phpVersionId),
Expand Down
2 changes: 1 addition & 1 deletion tests/PHPStan/Rules/Methods/MethodAttributesRuleTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ protected function getRule(): Rule
),
new ClassNameCheck(
new ClassCaseSensitivityCheck($reflectionProvider, false),
new ClassForbiddenNameCheck(),
new ClassForbiddenNameCheck(self::getContainer()),
),
true,
),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ protected function getRule(): Rule
$ruleLevelHelper,
new ClassNameCheck(
new ClassCaseSensitivityCheck($reflectionProvider, true),
new ClassForbiddenNameCheck(),
new ClassForbiddenNameCheck(self::getContainer()),
),
true,
true,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ protected function getRule(): Rule
$reflectionProvider,
new ClassNameCheck(
new ClassCaseSensitivityCheck($reflectionProvider, true),
new ClassForbiddenNameCheck(),
new ClassForbiddenNameCheck(self::getContainer()),
),
true,
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ protected function getRule(): Rule
$reflectionProvider,
new ClassNameCheck(
new ClassCaseSensitivityCheck($reflectionProvider, true),
new ClassForbiddenNameCheck(),
new ClassForbiddenNameCheck(self::getContainer()),
),
true,
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ protected function getRule(): Rule
$reflectionProvider,
new ClassNameCheck(
new ClassCaseSensitivityCheck($reflectionProvider, true),
new ClassForbiddenNameCheck(),
new ClassForbiddenNameCheck(self::getContainer()),
),
new GenericObjectTypeCheck(),
$typeAliasResolver,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ protected function getRule(): Rule
$reflectionProvider,
new ClassNameCheck(
new ClassCaseSensitivityCheck($reflectionProvider, true),
new ClassForbiddenNameCheck(),
new ClassForbiddenNameCheck(self::getContainer()),
),
new GenericObjectTypeCheck(),
$typeAliasResolver,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ protected function getRule(): Rule
$reflectionProvider,
new ClassNameCheck(
new ClassCaseSensitivityCheck($reflectionProvider, true),
new ClassForbiddenNameCheck(),
new ClassForbiddenNameCheck(self::getContainer()),
),
new GenericObjectTypeCheck(),
new MissingTypehintCheck(true, true, true, true, []),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ protected function getRule(): Rule
new RequireExtendsCheck(
new ClassNameCheck(
new ClassCaseSensitivityCheck($reflectionProvider, true),
new ClassForbiddenNameCheck(),
new ClassForbiddenNameCheck(self::getContainer()),
),
true,
),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ protected function getRule(): Rule
new RequireExtendsCheck(
new ClassNameCheck(
new ClassCaseSensitivityCheck($reflectionProvider, true),
new ClassForbiddenNameCheck(),
new ClassForbiddenNameCheck(self::getContainer()),
),
true,
),
Expand Down

0 comments on commit 079cf09

Please sign in to comment.