phpstan-extensions
                                
                                 phpstan-extensions copied to clipboard
                                
                                    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, see- phpstan/phpstan-strict-rules#87
- SlamPhpStan\StringToClassRule: requires strings that refer to classes to be expressed with- ::classnotation
- 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 by- symfony/filesystemcomponent
- SlamPhpStan\SymfonyProcessRule: forbid calls to raw system functions well wrapped by- symfony/processcomponent
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\AccessGlobalVariableWithinContextRuleto deny the usage of- $_GET,- $_POSTand other global variables in models implementing- yii\db\ActiveRecordInterface: accessing to singletons in models is considered an anti-pattern
- SlamPhpStan\AccessStaticPropertyWithinModelContextRuleto deny the usage of- yii\BaseYiistatic variables like- $appin models implementing- yii\db\ActiveRecordInterface: accessing to singletons in models is considered an anti-pattern