4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【PHPStan】カスタムルール作ってみた

Posted at

私が所属しているインターン先のコーディング規約にオペレーターに関しては厳密チェックを行うようにするといったルールがあります。

そこで今回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]

感想

独自でルールを作ることで、よくあるコーディング規約に関するレビューでの指摘も減らすことができるのでとても良いと思いました!

すごく簡単にできたのでぜひやってみてください!

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?