もがき系プログラマの日常

もがき系エンジニアの勉強したこと、日常のこと、気になっている技術、備忘録などを紹介するブログです。

phpstanの"no value type specified in iterable type array" の対応方法

はじめに

こんばんは。

phpstan使ってますか?

自分はLaravelのお仕事を受けることが多く、その現場では larastanとして導入されている事が多いです。

個人的によく怒られるエラーの代表として no value type specified in iterable type array があるかなと思ってます。

配列の中身ちゃんと定義してね。ってやつです。

基本的にはちゃんと書くと思うんですが、ちょっとここは除外したいなーってときもあると思います。

たとえば Laravel の FormRequestクラスの rules() とか attributes() とかです。

配列をかえすのはきまってるけど、配列の中身を正確に知る必要はそこまでないかなと思います。

ここだけどうにか除外できないかなーと思って、調べてみました。

本題

1. levelを5にする

levelを5にすると、このエラーは発生しません。

parameters:
    paths:
        - app/
    level: 5

2. checkMissingIterableValueType をfalseにする

checkMissingIterableValueType: false にすると、このエラーを無視することができます。

parameters:
    paths:
        - app/
    level: 9
    checkMissingIterableValueType: false

3. excludePathsを使って FormRequest.phpをチェック外にする

以下のようにすることで *FormRequest.php はphpstanのチェックから外されます。

parameters:
    paths:
        - app/
    level: 9
    excludePaths:
        - app/Http/Request/**/*FormRequest.php

4. ignoreErrorsを使って 該当のエラーだけは除外する

以下のようにすることで FormRequestrules() で起こる該当エラーだけ除外できます。

parameters:
    paths:
        - app/
    level: 9
    ignoreErrors:
        - '#FormRequest::rules\(\) return type has no value type specified in iterable type array\.#'

終わりに

プロジェクトによっていろいろ変わると思いますが、個人的には4番を採用してます。

現場からは以上です。