slam/phpstan-extensions
PHPStan extensions with extra strict rules: unused variables, closure parameter typehints, enforce ::class notation, forbid goto, naming conventions, validate PHPUnit annotation FQCNs, and restrict access to globals/static properties in specific contexts.
Extensions for PHPStan
To use this extension, require it in Composer:
composer require --dev slam/phpstan-extensions
When you are using phpstan/extension-installer,
conf/slam-rules.neon will be automatically included.
Otherwise you need to include conf/slam-rules.neon in your phpstan.neon:
includes:
- vendor/slam/phpstan-extensions/conf/slam-rules.neon
SlamPhpStan\UnusedVariableRule: check for variable inside functions never used after initial assignmentSlamPhpStan\MissingClosureParameterTypehintRule: requires parameter typehints for closures; WARNING: no PhpDoc
allowed, see phpstan/phpstan-strict-rules#87SlamPhpStan\StringToClassRule: requires strings that refer to classes to be expressed with ::class notationSlamPhpStan\GotoRule: no goto allowedSlamPhpStan\ClassNotationRule:
SlamPhpStan\PhpUnitFqcnAnnotationRule: classes found in following PHPUnit annotations must exist:
@expectedException@covers@coversDefaultClass@usesSlamPhpStan\AccessGlobalVariableWithinContextRule: inhibit the access to globals within
classes that extend or implement a certain class/interfaceSlamPhpStan\AccessStaticPropertyWithinModelContextRule: inhibit the access to static attributes of a class within
classes that extend or implement a certain class/interface, useful to prohibit usage of singletons in modelsA not-now-rules.neon config is present for forbidding raw date system calls:
includes:
- vendor/slam/phpstan-extensions/conf/not-now-rules.neon
These rules forbid:
new DateTimeImmutable()new DateTime('yesterday')date('Y-m-d')time(), microtime()strtotime('noon')You should instead rely on a clock abstraction like lcobucci/clock.
WARNING: the rules are not perfect, a user can tricks them easily; they are meant only to help the transition to a proper clock abstraction.
A symfony-rules.neon config is present for Symfony projects:
includes:
- vendor/slam/phpstan-extensions/conf/symfony-rules.neon
With the following configurations:
SlamPhpStan\SymfonyFilesystemRule: forbid calls to raw filesystem functions well wrapped by
symfony/filesystem componentSlamPhpStan\SymfonyProcessRule: forbid calls to raw system functions well wrapped by
symfony/process componentA yii-rules.neon config is present for Yii projects:
includes:
- vendor/slam/phpstan-extensions/conf/yii-rules.neon
With the following configurations:
SlamPhpStan\AccessGlobalVariableWithinContextRule to deny the usage of $_GET, $_POST and other global variables
in models implementing yii\db\ActiveRecordInterface: accessing to singletons in models is considered an anti-patternSlamPhpStan\AccessStaticPropertyWithinModelContextRule to deny the usage of yii\BaseYii static variables like
$app in models implementing yii\db\ActiveRecordInterface: accessing to singletons in models is considered an
anti-patternHow can I help you explore Laravel packages today?