🐶
PHPStanで引数の型チェック
PHPStanには検査のレベルがあり、徐々に厳しくすることで未成熟なコードでも無理なく導入できるようになっている。
level5の概要を見ると以下のように書かれている。
- checking types of arguments passed to methods and functions
これがどのように実現されているのか、コードとドキュメントを追ってみた。 バージョンは以下の通り。
$ ./vendor/bin/phpstan -V
PHPStan - PHP Static Analysis Tool 1.10.25
level5で解析を実行するには./vendor/bin/phpstan analyze --level 5 src
のようにする。 この時CommandHelper
においてvendor/phpstan/phpstan/phpstan.phar/conf/config.level5.neon
を読み込みにいくので、これを確認してみる。
parameters:
checkFunctionArgumentTypes: true
rulesではなくparametersが設定されているようだ。このあたりを参考にcheckFunctionArgumentTypes
を受け取るargumentsを探しにゆきconfig.neon
が見つかった。
services:
# 略
-
class: PHPStan\Rules\FunctionCallParametersCheck
arguments:
checkArgumentTypes: %checkFunctionArgumentTypes%
checkArgumentsPassedByReference: %checkArgumentsPassedByReference%
checkExtraArguments: %checkExtraArguments%
checkMissingTypehints: %checkMissingTypehints%
checkUnresolvableParameterTypes: %featureToggles.checkUnresolvableParameterTypes%
引数を与えることでFunctionCallParametersCheck
の挙動を制御できるようだ。FunctionCallParametersCheck
の中身を確認してみる。FunctionCallParametersCheck->check()
にルールが書かれている。そして、これを呼び出すCallToFunctionParametersRule
やCallMethodsRule
はconfig.level0.neon
で実行されるように設定されている。
というわけでFunctionCallParametersCheck
に含まれる一部のルールはlevelによらず実行されるが、functionの引数の型をチェックするのはlevel5からとわかった。
Discussion