rtcamp / wp-phpstan
rtCamp PHPStan configuration and baseline for WordPress projects.
Requires
- php: >=8.2
- phpstan/phpstan: ^2.0
- szepeviktor/phpstan-wordpress: ^2.0
Requires (Dev)
- phpunit/phpunit: ^11.5
Suggests
None
Provides
None
Conflicts
None
Replaces
None
README
rtCamp's shared PHPStan baseline for WordPress projects (rtcamp/wp-phpstan).
Developed in rtCamp/wp-tooling. The
rtCamp/wp-phpstanrepository is a read-only mirror, split from there on each release. Please open issues and pull requests in wp-tooling.
This package ships a single phpstan.neon.dist of rtCamp defaults (level 5, WordPress-aware
rules) and pulls in szepeviktor/phpstan-wordpress,
which loads the WordPress function stubs and dynamic return-type extensions PHPStan
needs to understand core.
Install
composer require --dev rtcamp/wp-phpstan
This brings phpstan/phpstan and szepeviktor/phpstan-wordpress (and the WordPress
stubs) along with it — you do not need to require them separately.
Use
Create a phpstan.neon.dist at your project root that includes this baseline,
then point PHPStan at your code:
includes: - vendor/rtcamp/wp-phpstan/phpstan.neon.dist parameters: paths: - src - includes excludePaths: - vendor - node_modules - build - tests # Project-specific overrides and suppressions go here.
That single include is all you need. Run the analysis with:
vendor/bin/phpstan analyse
The WordPress extension must load exactly once. This baseline already includes
szepeviktor/phpstan-wordpress, and loading it twice fails PHPStan. So: don't include itsextension.neonin your own neon, and if you usephpstan/extension-installer, make it skip the package incomposer.json:"extra": { "phpstan/extension-installer": { "ignore": ["szepeviktor/phpstan-wordpress"] } }
Overriding
Anything you set under parameters after the includes wins, so a project can
raise the level, add paths, or add ignoreErrors without forking this baseline.
Per-project suppressions belong in your own neon — keep this shared file clean.
License
GPL-2.0-or-later. See LICENSE.