gengenです。入社して1年ちょっと経ちました。
個人的な開発でvscodeのPHP IntelliSenseのキャッシュに悩まされたのでトラブルシューティング的なものを書かせていただきます。
TL;DR
キャッシュが原因でPHP IntelliSenseの挙動がおかしいときは
PHP Language Serverのキャッシュディレクトリを消そう。
環境
- PHPのバージョン: 7.3.11
- Visual Studio Codeのバージョン: 1.41.1
- PHP IntelliSenseのバージョン: 2.3.13
ディレクトリ構成
- sample(projectRoot)
- src
- app
- vendor
- ...
- src
急にコードジャンプが出来なくなった
何もしてないのにvscodeが壊れた
いつの間にかvendor配下にコードジャンプが出来なくなっており、
ジャンプしようとすると以下のようなエラーが表示されます。
'AuthorizesRequests.php' を開くことができません: ファイル (Error: ファイルが見つかりません (/Users/gen/dev/sample_app/server/src/vendor/laravel/framework/src/Illuminate/Foundation/Auth/Access/AuthorizesRequests.php)) を読み取ることができません。
projectRoot/server/src/vendor
配下を見に行ってますが、現在のvendorディレクトリはprojectRoot/src/vendor
にあるのでジャンプ先のファイルはそこにはありません。
確かに以前、以下のようにserverディレクトリを挟む構成にしていたことがありました。
意味が無いので今の構成に変えたのですが、どうやら昔のパスを見に行っているようです 🤔
- sample(projectRoot)
- server
- src
- app
- vendor
- ...
- src
- server
原因
PHP IntelliSenseはPHP Language Serverを使ってハイライトや補完をしています。
PHP Language Server の出力を見てみると、どうやらvendor配下のライブラリはキャッシュする仕組みになっていて更新されていないようです
Parsing file:///Users/gen/dev/sample_app/src/server.php
Parsing file:///Users/gen/dev/sample_app/src/bootstrap/app.php
Parsing file:///Users/gen/dev/sample_app/src/bootstrap/cache/services.php
# 中略
[Info - 13:57:45] Restored laravel/tinker:1.0.10 from cache
[Info - 13:57:45] Restored laravel/framework:6.6.2 from cache
解決方法
PHP Language Serverのキャッシュディレクトリを消すしか無いようです(参考)。
私の環境では$HOME/.phpls
でした。
ファイル名を見た感じライブラリごとにキャッシュファイルがあるみたいなので頑張れば狂った部分だけ削除できそうですが頑張れないのでまるっと削除しました。
終わりに
同じトラブルに遭遇した方のお役に立てれば幸いです。
完全に蛇足ですが、
ちょうど今回のことで困っていたところ、知り合いからPHP Intelephenseを紹介されました。
IntelliSenseより軽いような気がしますし、今回のトラブルの原因になったディレクトリ構成の変更をしても狂わなかったので乗り換えました。今の所不便はないです。
現場からは以上です👷良いお年を🙇