phpstan-extensions
phpstan-extensions copied to clipboard
Extensions for PHPStan
Slam PHPStan extensions
Extensions for PHPStan
Installation
To use this extension, require it in Composer:
composer require --dev slam/phpstan-extensions
Usage
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
Rules
-
SlamPhpStan\UnusedVariableRule
: check for variable inside functions never used after initial assignment -
SlamPhpStan\MissingClosureParameterTypehintRule
: requires parameter typehints for closures; WARNING: no PhpDoc allowed, seephpstan/phpstan-strict-rules#87
-
SlamPhpStan\StringToClassRule
: requires strings that refer to classes to be expressed with::class
notation -
SlamPhpStan\GotoRule
: no goto allowed -
SlamPhpStan\ClassNotationRule
:- Interfaces must end with "Interface"
- Traits must end with "Trait"
- Abstract classes must start with "Abstract"
- Exceptions must end with "Exception"
-
SlamPhpStan\PhpUnitFqcnAnnotationRule
: classes found in following PHPUnit annotations must exist:-
@expectedException
-
@covers
-
@coversDefaultClass
-
@uses
-
-
SlamPhpStan\AccessGlobalVariableWithinContextRule
: inhibit the access to globals within classes that extend or implement a certain class/interface -
SlamPhpStan\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 models
Not-NOW config
A 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()
-
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.
Symfony-specific config
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 bysymfony/filesystem
component -
SlamPhpStan\SymfonyProcessRule
: forbid calls to raw system functions well wrapped bysymfony/process
component
Yii-specific config
A 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 implementingyii\db\ActiveRecordInterface
: accessing to singletons in models is considered an anti-pattern -
SlamPhpStan\AccessStaticPropertyWithinModelContextRule
to deny the usage ofyii\BaseYii
static variables like$app
in models implementingyii\db\ActiveRecordInterface
: accessing to singletons in models is considered an anti-pattern