2020/06/20

VimでLaravelを触ったらCOCがUndefined type 'Route'エラーを吐いたのでその対処法

カテゴリー:その他もろもろ

普段Vimでコードを書くときに補完としてCOCを使っているのですが、業務でちょっとLaravelを触ることになってルーティングや割り当てられているコントローラーを確認するために、web.phpを確認したら、以下のような状態になりました。


引用:https://www.kakistamp.com/entry/2020/05/02/214610

エラーが発生した時にスクショを取っていなかったため、引用させていただきました。。。

僕の場合はRouteやAuthなど、ファサードに対して軒並みエラーが表示されるという状態が発生しました。
VSCodeでの解決策は山のように出てきたのですが、Vimで、かつ、COCでこの現象を解決する方法は、ググっても情報が全く出てこなかったので解決するのに結構苦労しました。

今回はVimのCOCで、ファサードのUndefined typeエラーを解決する方法を紹介します。

解決策

下記のサイトを参考にcoc-settings.jsonの設定を変更して、Vimを再起動したら直りました。
【VSCode拡張機能Intelephenseの更新によるUndefined type 'Route'(他クラス)のエラー】

intelephense.diagnostics.undefinedClassConstants
intelephense.diagnostics.undefinedConstants
intelephense.diagnostics.undefinedFunctions
intelephense.diagnostics.undefinedMethods
intelephense.diagnostics.undefinedProperties
intelephense.diagnostics.undefinedTypes

上記の設定をjson形式で指定したというかんじです。
→VSCodeだとチェックを外すだけらしい。。。
Vimを起動したら、:CocConfigと入力すると勝手にcoc-settings.jsonというファイルが生成されるので、以下のように入力しましょう。

{
  "intelephense": {
    "diagnostics": {
      "undefinedClassConstants": false,
      "undefinedConstants": false,
      "undefinedFunctions": false,
      "undefinedMethods": false,
      "undefinedProperties": false,
      "undefinedTypes": false
     },
    "command": "intelephense",
    "args": ["--stdio"],
    "filetypes": ["php"],
    "initializationOptions": {
      "storagePath": "/tmp/intelephense"
     }
   }
}

大枠の設定は以下のサイトを参考にさせていただきました。
【vimにlanguage serverを設定する】


無事エラーは消えました。
画像は個人開発で昔作ったアプリのweb.phpです。
こいつもRouteやAuthがエラーを吐いていました。

まとめ

原因はどうやら、12月初旬に行われたIntelephenseの更新が原因らしいです。
何はともあれ、エラーが消えてよかったです。

おまけ

今回のエラーはマジで情報が一つも出てこなかったので解決するのに苦労しました。
エラー自体は、実は1ヶ月前くらいに発生していましたが、分からなくて諦めました。

VSCodeでなんとかすることも考えましたが、VSCodeだと操作がしづらく、ストレスが溜まるので、なんとか解決策を見つけた次第です。
→Vimのキーバインドを使えるようするプラグインを入れたりもしましたが、1時間でVimに戻ってました。

ただ、全くIDEを使わないというわけではなくて、、、
画像を扱ったり、Gitグラフを確認したり、面倒なコンフリクト(簡単そうなのはgit mergetool使う)を解消したり、マークダウンを編集しながら確認したりしたい時はVSCodeを使ってます。

話がそれましたが、、、Vimをメインで使うようになってからエラーの解決力が格段に上がった気がします。
なんでかって公式を読まざるを得ないし、情報がない時は海外の記事もチェックしたりもしなきゃいけないし、マジで鍛えられるわーって感じです。

まっ、初学者の方には絶対お勧めしませんけどねっ!