Set of rules for PHPStan used by Symplify projects
- See Rules Overview
composer require symplify/phpstan-rules --dev
Some of rules here require configuration, some not. We recommend to start with rules that do not require any configuration, because there is just one way to use them:
# phpstan.neon
includes:
- vendor/symplify/phpstan-rules/config/static-rules.neon
Give it couple of days, before extending.
Some rules require extra services. To avoid service duplications, they're in the separate config that you can easily include:
includes:
- vendor/symplify/phpstan-rules/config/services/services.neon
Note: Rules in subpackages contain additional service definitions which need to be included, in case you configure these rules:
includes:
- vendor/symplify/phpstan-rules/config/packages/cognitive-complexity/cognitive-complexity-services.neon
services:
-
class: Symplify\PHPStanRules\CognitiveComplexity\Rules\ClassLikeCognitiveComplexityRule
tags: [phpstan.rules.rule]
arguments:
maxClassCognitiveComplexity: 10
Do you know prepared sets from ECS or Rector? Bunch of rules in single set. We use the same approach here:
includes:
- vendor/symplify/phpstan-rules/config/array-rules.neon
- vendor/symplify/phpstan-rules/config/code-complexity-rules.neon
- vendor/symplify/phpstan-rules/config/doctrine-rules.neon
- vendor/symplify/phpstan-rules/config/naming-rules.neon
- vendor/symplify/phpstan-rules/config/regex-rules.neon
- vendor/symplify/phpstan-rules/config/forbidden-static-rules.neon
- vendor/symplify/phpstan-rules/config/test-rules.neon
Pick what you need, drop the rest.
Last but not least, configurable rules with saints defaults. That's just polite wording for opinionated, like AllowedExclusiveDependencyRule
.
You might not like them, but maybe you do:
# phpstan.neon
includes:
- vendor/symplify/phpstan-rules/config/configurable-rules.neon
Give it a trial run... so many erros and unclear feedback.... Would you like to configure them yourself? That's good! We use one rule by another in other projects too, instead of one big import.
- Pick one and put it to your
phpstan.neon
manually. - Configure it to your specific needs and re-run PHPStan. It's easier to be responsible, when you're in control.
E.g. ForbiddenNodeRule
:
services:
-
class: Symplify\PHPStanRules\Rules\ForbiddenNodeRule
tags: [phpstan.rules.rule]
arguments:
forbiddenNodes:
- PhpParser\Node\Expr\Empty_
- PhpParser\Node\Stmt\Switch_
- PhpParser\Node\Expr\ErrorSuppress
You'll find them all in rules overview.
Happy coding!
In case you are experiencing a bug or want to request a new feature head over to the Symplify monorepo issue tracker
The sources of this package are contained in the Symplify monorepo. We welcome contributions for this package on symplify/symplify.