私が所属しているインターン先のコーディング規約にオペレーターに関しては厳密チェックを行うようにするといったルールがあります。
そこで今回PHPStanを用いて、==または!=を用いている箇所があった場合にPHPStanでエラーを吐き出すようにカスタムルールを作りました。
手順
ルールクラス作成
追加したいルールのクラスを作成します。今回は==と!=があった場合にエラーを出したいので以下の二つを追加します。
どこに作っても問題ないですが、今回はApp\PHPStan\Rulesに作成します。
DisallowEqualOperatorRule.php
<?php
namespace App\PHPStan\Rules;
use PhpParser\Node;
use PHPStan\Analyser\Scope;
use PhpParser\Node\Expr\BinaryOp\Equal;
class DisallowEqualOperatorRule implements \PHPStan\Rules\Rule
{
public function getNodeType(): string
{
return Equal::class;
}
public function processNode(Node $node, Scope $scope): array
{
return ['Non-strict comparison operator "==" is not allowed. Use "===" instead.'];
}
}
DisallowNotEqualOperatorRule.php
<?php
namespace App\PHPStan\Rules;
use PhpParser\Node;
use PHPStan\Analyser\Scope;
use PhpParser\Node\Expr\BinaryOp\NotEqual;
class DisallowNotEqualOperatorRule implements \PHPStan\Rules\Rule
{
public function getNodeType(): string
{
return NotEqual::class;
}
public function processNode(Node $node, Scope $scope): array
{
return ['Non-strict comparison operator "!=" is not allowed. Use "!==" instead.'];
}
}
phpstan.neonに以下を追記
作成したルール2つのクラスを監視対象に置きます。
これでオペレーターの厳密チェックに関してもPHPStanで検知できるようになります。
services:
-
class: App\PHPStan\Rules\DisallowEqualOperatorRule
tags: [phpstan.rules.rule]
-
class: App\PHPStan\Rules\DisallowNotEqualOperatorRule
tags: [phpstan.rules.rule]
感想
独自でルールを作ることで、よくあるコーディング規約に関するレビューでの指摘も減らすことができるのでとても良いと思いました!
すごく簡単にできたのでぜひやってみてください!