概要
- Laravel8にPHPStanを導入したときのメモ
Larastanの選択
- PHPStanを直接入れるのではなく、Larastanを使うほうがスタンダードなのかと思い、Larastanを選択
Larastan 1.x
Laravel8以前は、Larastanの1系となる模様
github.com
ちなみにLaravel9移行がLarastanの2系となる
github.com
isntall
composer require nunomaduro/larastan:^1.0 --dev
上記コマンドのインストールが終わったら、*.neon
ファイルを作成する(手動で)
自動で作成されそうな記載もあるが、作成されなかった
touch phpstan.neon
公式のサンプルのneonファイルはテストに通らなかったので、少し加工して以下のように。
ignoreErrors
の部分で、エラーが出てしまったので、その部分は削除。
また、tests
ディレクトリを追加してみた
includes:
- ./vendor/nunomaduro/larastan/extension.neon
parameters:
paths:
- app
- tests
# The level 9 is the highest level
level: 0
excludePaths:
- ./vender
checkMissingIterableValueType: false
このように出ればOK
42/42 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
[OK] No errors
他のフォルダも追加
includes:
- ./vendor/nunomaduro/larastan/extension.neon
parameters:
paths:
- app
- config
- tests
- database
- routes
# The level 9 is the highest level
level: 0
excludePaths:
- ./vender
checkMissingIterableValueType: false
エラーが発生する
上記のneonファイルで実行するとエラーが発生してしまった。
どうやら、$this
の解決ができないよ、というような感じ。
------ ---------------------------
Line routes/console.php
------ ---------------------------
18 Undefined variable: $this
------ ---------------------------
実際にエラーがでているroutes/console.php
ファイルを見てみると
<?php
use Illuminate\Foundation\Inspiring;
use Illuminate\Support\Facades\Artisan;
Artisan::command('inspire', function () {
$this->comment(Inspiring::quote());
})->purpose('Display an inspiring quote');
このようになっており、$this
がアカンらしい。
無視
解決できないようなので、無視するのがいいらしい
github.com
/* @phpstan-ignore-next-line */
このような感じでphpstanに無視を教えてあげることが可能(各種Linterと似たような感じ)
Artisan::command('inspire', function () {
/* @phpstan-ignore-next-line */
$this->comment(Inspiring::quote());
})->purpose('Display an inspiring quote');
上記のようになりました。