Fails to Recognize PHPStan Baseline During Commit Workflow
| Q | A |
|---|---|
| Version | v2.2.0 |
| Bug? | yes |
| New feature? | no |
| Question? | no |
| Documentation? | no |
| Related tickets |
I am encountering an issue when trying to commit changes. Despite having added errors to the PHPStan baseline and successfully running vendor/bin/phpstan and vendor/bin/grumphp run, GrumPHP fails during the commit process, reporting errors that should have been ignored.
My configuration
# grumphp.yml
grumphp:
parallel:
enabled: true
max_workers: 32
fixer:
enabled: true
fix_by_default: true
tasks:
phpmd:
whitelist_patterns:
- /^app\/Http\/Controllers\/(.*)/
- /^app\/Http\/Middleware\/(.*)/
- /^app\/Exceptions\/(.*)/
exclude: ['vendor/','database/seeders/','bootstrap/','public/','storage/','app/Http/Controllers/Testing/', 'tests/']
report_format: ansi
ruleset: ['phpmd_ruleset.xml']
triggered_by: ['php']
phpstan:
autoload_file: ~
configuration: phpstan.neon
level: 9
force_patterns: []
ignore_patterns: []
triggered_by: ['php']
memory_limit: "-1"
use_grumphp_paths: true
phpcsfixer:
allow_risky: true
cache_file: .php-cs-fixer.cache
config: .php-cs-fixer.php
rules: []
using_cache: true
config_contains_finder: true
verbose: true
diff: false
triggered_by: ['php']
Expected Behavior: I expect GrumPHP to recognize the baseline file and exclude the errors that have been marked as allowed in PHPStan. The baseline file is correctly generated, and the phpstan.neon configuration seems to be in order.
Actual Behavior: GrumPHP is not honoring the PHPStan baseline during the commit process, leading to the detection of errors that should have been ignored based on the baseline file. This issue seems to be specific to the interaction between GrumPHP and PHPStan during the commit workflow.
Steps to reproduce:
- Configure GrumPHP with PHPStan and generate a PHPStan baseline.
- Introduce errors to a file, add it to the baseline, and attempt to commit.
- Observe GrumPHP failing to recognize the baseline during the commit process.
My actions
Run GrumPHP with commit:
git commit -m "Commit message'"
GrumPHP detected a pre-commit command.
GrumPHP is sniffing your code!
Running tasks with priority 0!
==============================
Running task 1/3: phpmd...
Running task 2/3: phpstan...
Running task 3/3: phpcsfixer...
Running task 1/3: phpmd... ✔
Running task 2/3: phpstan... ✘
Running task 3/3: phpcsfixer... ✔
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
▄▄▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▌
▐▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▄
▐▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▌
▐▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▌
▄███▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▌
█▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▌
▐█▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▌
▀█▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▌
▀▀▓▓▓▓▓▓▓▓▓▓▓▓█▀▀▀▀▀▀▀▀▀▀▀▀▀▀████████████▄
▄███████ ██████████
███████▀ ▀▀▀▀▀▄ ▄▀▀▀▀▀ █████ ▀
▐████ ▐██ ▐██ ████▌
████▌ ███
▌██▌ ▄▄ ▄▄ ▐███
███ ▄▄▄▄▄▄▄▄▄▄▄▄ ▐███
██▄ ▐███████████████████████████
█▀███████████▀ ▀▀███████████
██████████▄███████▄███████████
▐█████████████████████████████
█████████████████████████████
██ █████████████████████▐██▀
▀ ▐███████████████████▌ ▐▀
████▀████████▀▐███
▀█▌ ▐█████ ██▌
██▀ ▐▀
██████████████████████████████████
█░░░░░░▀█▀░░░░░░▀█░░░░░░▀█▀░░░░░▀█
█░░▐█▌░░█░░░██░░░█░░██░░░█░░░██░░█
█░░▐█▌░░█░░░██░░░█░░██░░░█░░░██░░█
█░░▐█▌░░█░░░██░░░█░░░░░░▄█░░▄▄▄▄▄█
█░░▐█▌░░█░░░██░░░█░░░░████░░░░░░░█
█░░░█░░░█▄░░░░░░▄█░░░░████▄░░░░░▄█
██████████████████████████████████
phpstan
=======
------- --------------------------------------------------------------------------------------------------------
Line Http\Controllers\Controller.php
------- --------------------------------------------------------------------------------------------------------
(lots of errors)
[ERROR] Found 182 errors
To skip commit checks, add -n or --no-verify flag to commit command
Run GrumPHP:
vendor/bin/grumphp run
GrumPHP is sniffing your code!
Running tasks with priority 0!
==============================
Running task 1/3: phpmd...
Running task 2/3: phpstan...
Running task 3/3: phpcsfixer... ✔
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
▄▄▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▌
▄▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▌
▐▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▌
▐▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▌
▄▐▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▌
▐▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▌
▐█▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▌
▀█▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▌
▀▀▓▓▓▓▓▓▓▓▓▓▓▓█▀▀▀▀▀▀▀▀▀▀▀▀▀▀████████████▄
▄████████▀▀▀▀▀ ██████████
███████▀ ██████▀
▐████ ██▌ ██ ████▌
▐█▌ ███
█▌ ▄▄ ▄▄ ▐███
███ ▄▄▄▄▄▄▄▄▄▄▄▄ ▐███
██▄ ▐███████████████████████████
█▀█████████▌▀▀▀▀▀▀▀▀▀██████████▌▐
███████████▄▄▄▄▄▄▄███████████▌
▐█████████████████████████████
█████████████████████████████
██ █████████████████████▐██▀
▀ ▐███████████████████▌ ▐▀
████▀████████▀▐███
▀█▌ ▐█████ ▐█▌
██▀ ▐▀
_ _ _ _ _
/ \ | | | __ _ ___ ___ __| | |
/ _ \ | | | / _` |/ _ \ / _ \ / _` | |
/ ___ \| | | | (_| | (_) | (_) | (_| |_|
/_/ \_\_|_| \__, |\___/ \___/ \__,_(_)
Additional Context
I have verified that PHPStan runs successfully with the generated baseline, and no errors are reported when directly executing vendor/bin/phpstan.
My phpstan.neon config located in root:
includes:
- ./vendor/nunomaduro/larastan/extension.neon
- phpstan-baseline.neon
parameters:
paths:
- app
- config
- database
- routes
- tests
# Level 9 is the highest level
level: 8
excludePaths:
- app/Http/Controllers/Testing/*
- database/factories/*
- database/seeders/*
- bootstrap/*
- public/*
- resources/*
- routes/tests
- storage/*
- phpmd_ruleset.xml
- phpmd.baseline.xml
- pdepend.xml
- phpunit.xml
checkMissingIterableValueType: false
reportUnmatchedIgnoredErrors: false
This issue has been open for a long time. I'm not using phpstan myself and don't really know what is going wrong exactly. Is this still an issue or can this be closed?
Feel free to dive into the phpstan task and provide a possible solution here :)