shipmonk/phpstan-baseline-per-identifier
Split a PHPStan baseline into multiple NEON files grouped by error identifier, with a loader include. Generate baseline as usual, then run split-phpstan-baseline to organize ignores per identifier for easier reviews and maintenance.
Split your PHPStan baseline into multiple files, one per error identifier:
baselines/
├─ _loader.neon
├─ empty.notAllowed.neon
├─ foreach.nonIterable.neon
├─ identical.alwaysFalse.neon
└─ if.condNotBoolean.neon
Each file looks like this:
# total 1 error
parameters:
ignoreErrors:
-
message: '#^Construct empty\(\) is not allowed\. Use more strict comparison\.$#'
path: ../app/index.php
count: 1
composer require --dev shipmonk/phpstan-baseline-per-identifier
[!IMPORTANT] This usage is available since version 2.0. See legacy usage below if you are still using PHPStan 1.x
Remove old single baseline include:
-includes:
- - phpstan-baseline.neon
Run native baseline generation and split it into multiple files via our script (other baseline files will be placed beside the loader):
vendor/bin/phpstan --generate-baseline=baselines/_loader.neon && vendor/bin/split-phpstan-baseline baselines/_loader.neon
Setup the baselines loader:
# phpstan.neon.dist
includes:
- baselines/_loader.neon
(optional) You can simplify generation with e.g. composer script:
{
"scripts": {
"generate:baseline:phpstan": [
"phpstan --generate-baseline=baselines/_loader.neon",
"split-phpstan-baseline baselines/_loader.neon"
]
}
}
This usage is deprecated since 2.0, but it works in all versions. Downside is that it cannot utilize result cache and does not support
rawMessage.
Setup where your baseline files should be stored and include its loader:
# phpstan.neon.dist
includes:
- vendor/shipmonk/phpstan-baseline-per-identifier/extension.neon # or use extension-installer
- baselines/loader.neon
parameters:
shipmonkBaselinePerIdentifier:
directory: %currentWorkingDirectory%/baselines
indent: ' '
Prepare composer script to simplify generation:
{
"scripts": {
"generate:baseline:phpstan": [
"rm baselines/*.neon",
"touch baselines/loader.neon",
"phpstan analyse --error-format baselinePerIdentifier"
]
}
}
--tabs to use tabs as indents in generated neon files--no-error-count to remove errors count in generated filesHow can I help you explore Laravel packages today?