VSCodeも万能じゃない。
背景
なぜか読み込んでくれないからエラーになることがある
ある日、Laravelで外部サービスログイン機能を実装するために、Socialiteをインストールしたら事件は起こった。
書き方は正しいのにVSCodeが「そんなメソッドはない」と言ってくる!
(socialiteのドライバーで読み込んだstatelessメソッドが存在しない警告エラー)
でも、動かすとちゃんと想定通りに動く。
そりゃちゃんと公式リファレンスの仕様通りに書いてるからね…。
原因を調べると、どうやら読みはあっていたようで、
動的なインスタンスにはIDEがうまいこと動いてくれていないらしい。
~IDEとは~
解消法を調べていたところ、明示的にクラスパスを指定できる記法なるものがあるらしいので、適用してみる。
解決法
呼び出したクラスを明示的に宣言する
書き方はこれ。
/** @var Laravel\Socialite\Two\GoogleProvider $driver */
$driver = Socialite::driver('google');
呼び出したDriverがどのクラスの内容で生成されるのかを/** */
で定義している。
今回の例でいうと、Socialite::driver('google')
で呼び出したものはLaravel\Socialite\Two\GoogleProvider
というクラスのモノが使えるはずとなる。
/** @var Laravel\Socialite\Two\GoogleProvider $driver */
が記載されることで、IDEは「$driverという変数にはLaravel\Socialite\Two\GoogleProviderクラスが入ってくるらしい」という認識がされるため、内部のメソッドまで正常に読み込んでくれる。
今後も何故か読み込んでくれないという事象が発生したら、上記を試してみましょう。
参考
LINEオープンチャット「Laravel初心者勉強会」の皆様
Laravel初心者勉強会