まとめ
composer update nunomaduro/larastan:^1.0 --dev
でアップデートしたところ、 Laravel インストールして生成された無編集のソースコードでエラーが発生した、https://github.com/laravel/laravel/blob/8.x/app
から最新ソースコードを適用することで解決したエラーもあった。- どうしても解決できないものは、 Ignoring Errors | PHPStan を参考にエラー抑制した。
Larastan バージョンアップ後に発生したエラー内容
app@b08dd89b31aa:/var/www/html/laravel$ vendor/bin/phpstan --memory-limit=-1
Note: Using configuration file /var/www/html/laravel/phpstan.neon.dist.
34/34 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
------ ------------------------------------------------------------------------------------------------------------------------------------------
Line Exceptions/Handler.php
------ ------------------------------------------------------------------------------------------------------------------------------------------
15 PHPDoc type array of property App\Exceptions\Handler::$dontReport is not covariant with PHPDoc type array<string> of overridden property
Illuminate\Foundation\Exceptions\Handler::$dontReport.
💡 You can fix 3rd party PHPDoc types with stub files:
https://phpstan.org/user-guide/stub-files
24 PHPDoc type array of property App\Exceptions\Handler::$dontFlash is not covariant with PHPDoc type array<string> of overridden property
Illuminate\Foundation\Exceptions\Handler::$dontFlash.
💡 You can fix 3rd party PHPDoc types with stub files:
https://phpstan.org/user-guide/stub-files
------ ------------------------------------------------------------------------------------------------------------------------------------------
------ -------------------------------------------------
Line Providers/RouteServiceProvider.php
------ -------------------------------------------------
36 PHPDoc tag @var above a method has no effect.
36 PHPDoc tag @var does not specify variable name.
------ -------------------------------------------------
[ERROR] Found 4 errors
app@b08dd89b31aa:/var/www/html/laravel$
エラーの解消その1
laravel/Handler.php at 843a4f81eb25b88b225a89d75a2d3c274e81be6b · laravel/laravel · GitHub をコピーして上書きすることで、解消できました。
差分は次の通りです。
app@b08dd89b31aa:/var/www/html/laravel$ git diff app/Exceptions/Handler.php
diff --git a/laravel/app/Exceptions/Handler.php b/laravel/app/Exceptions/Handler.php
index c18c43c..8e7fbd1 100644
--- a/laravel/app/Exceptions/Handler.php
+++ b/laravel/app/Exceptions/Handler.php
@@ -10,7 +10,7 @@ class Handler extends ExceptionHandler
/**
* A list of the exception types that are not reported.
*
- * @var array
+ * @var array<int, class-string<Throwable>>
*/
protected $dontReport = [
//
@@ -19,7 +19,7 @@ class Handler extends ExceptionHandler
/**
* A list of the inputs that are never flashed for validation exceptions.
*
- * @var array
+ * @var array<int, string>
*/
protected $dontFlash = [
'current_password',
app@b08dd89b31aa:/var/www/html/laravel$
エラーの解消その2
エラーの出たファイルは laravel/RouteServiceProvider.php at 843a4f81eb25b88b225a89d75a2d3c274e81be6b · laravel/laravel · GitHub と同一だったため、上書きすることで解決することはできませんでした。
そこで、 Ignoring Errors | PHPStan を読み、次のようにすることでエラーを解消できました。
app@b08dd89b31aa:/var/www/html/laravel$ git diff app/Providers/RouteServiceProvider.php
diff --git a/laravel/app/Providers/RouteServiceProvider.php b/laravel/app/Providers/RouteServiceProvider.php
index 3bd3c81..1aa1e23 100644
--- a/laravel/app/Providers/RouteServiceProvider.php
+++ b/laravel/app/Providers/RouteServiceProvider.php
@@ -33,7 +33,7 @@ class RouteServiceProvider extends ServiceProvider
*
* @return void
*/
- public function boot()
+ public function boot() // @phpstan-ignore-line
{
$this->configureRateLimiting();
app@b08dd89b31aa:/var/www/html/laravel$
おわりに
エラーを抑制する方法として、 phpstan.neon.dist
ファイルに登録する以外にも、もっと一時的で手軽な方法がないかなあ、、、と思っていたところに
という方法がありましたので、メモいたしました。
以上です。