-
-
Notifications
You must be signed in to change notification settings - Fork 6
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add PHPStan to QA checks #158
Conversation
PHPStan is a good addition to our QA toolkit and with improvements PHPStan has made over the years is now a viable tool for us to use (previously it would give way too many false positives). This commit: * Adds a separate job to the `basics` workflow in GH Actions. Notes: - I've **not** added PHPStan to the Composer dependencies for two reasons: 1. It doesn't allow for installation on PHP < 7.2, which would break/block the `composer install` for our test runs. 2. It would add dependencies which could conflict/cause problems for our test runs due to those defining token constants too. - [Phive](https://phar.io/) could potentially be used to still have a setup which can be used locally, but just running locally from a PHPStan PHAR file should work just fine. - For CI, PHPStan will be installed as a PHAR file by `setup-php` now. This does carry a risk _if_ PHPStan would make breaking changes or if a new release adds rules for the levels being scanned as, in that case, builds could unexpectedly start failing. Fixing the version for the `setup-php` action installs to the current release `1.12.3` could prevent that, but that adds an additional maintenance burden of having to keep updating the version as PHPStan releases pretty often. So, for now, I've elected to run the risk of random failures. If and when those start happening, this should be re-evaluated. * Adds a configuration file for PHPStan. Notes: - PHPStan needs to know about the dependencies (PHPCS et al), so I'm (re-)using the bootstrap file for the tests to load the PHPCS autoloader and register the standard with the PHPCS autoloader as adding an `autoload` directive to the `composer.json` file would cause problems with the PHPCS autoloader. - PHPStan flags type checks on properties with a documented type, while without `strict_types` we cannot always be sure the properties set will be of the correct type. For that reason, I've set `treatPhpDocTypesAsCertain` to `false` (which silences those notices). * Adds the configuration file to `.gitattributes` and the typical overload file for the configuration file to `.gitignore`. Refs: * https://phpstan.org/ * https://phpstan.org/config-reference
Strict types protects against the wrong type being used for outbound calls; parameter types are for asserting the type (with an error for callers who use strict types, or an implicit type-cast otherwise) of inbound parameters. This is a common misconception. It's parameter types that are at play here, not strict type mode. |
In this case, I was talking about the types for As for |
For reference, I agree that setting
That's exactly what I think there's a problem with the terminology being used here. I read I know that we have had a video conversation about this before, but it seems that the language is still being confused. I'm trying to clarify / correct what looks like misinformation to me. I like |
Except it only does so for calls to the functions from files also using
Sorry to disappoint you, but I think that will be a long wait as I do not support that direction. |
PHPStan is a good addition to our QA toolkit and with improvements PHPStan has made over the years is now a viable tool for us to use (previously it would give way too many false positives).
This commit:
basics
workflow in GH Actions.Notes:
composer install
for our test runs.setup-php
now.This does carry a risk if PHPStan would make breaking changes or if a new release adds rules for the levels being scanned as, in that case, builds could unexpectedly start failing.
Fixing the version for the
setup-php
action installs to the current release1.12.3
could prevent that, but that adds an additional maintenance burden of having to keep updating the version as PHPStan releases pretty often.So, for now, I've elected to run the risk of random failures. If and when those start happening, this should be re-evaluated.
Notes:
autoload
directive to thecomposer.json
file would cause problems with the PHPCS autoloader.strict_types
we cannot always be sure the properties set will be of the correct type. For that reason, I've settreatPhpDocTypesAsCertain
tofalse
(which silences those notices)..gitattributes
and the typical overload file for the configuration file to.gitignore
.Refs: