カテゴリー
Linux

nunomaduro/larastan 1.0.3 で Laravel 8 の無編集のソースコードへのエラーに対応したメモ

まとめ

  • 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 ファイルに登録する以外にも、もっと一時的で手軽な方法がないかなあ、、、と思っていたところに

という方法がありましたので、メモいたしました。

以上です。

コメントを残す