GoでGoLandやIntelliJ IDEAからVSCodeに乗り換えるとハマる
GoLandやIntelliJ IDEAといったJetBrain製のエディタから、VSCodeに乗り換えて Go を書きはじめると、突然 LSP が動いてないぞ?!となることがある。
特に、関数や変数の定義元参照や、参照先にジャンプする機能が突然動かなくなる。何もしてないのに!
この現象の主な原因は、goのソースコードにビルドタグが使われているときに、VSCodeの設定でビルドタグが指定されていないことにある。
GoLandやIntelliJ IDEAといったJetBrain製のエディタは基本的にビルドタグを指定しなくてもソースを追ってくれるが、VSCodeはビルドタグが指定されていると、いちいち明示しないと参照が途切れてしまう(細かく言うとVSCodeというより Go の LSP (gopls) の仕様かもしれないけど)。なので、VSCodeでビルドタグを使っているときは面倒だけどビルドタグを指定しないといけない。
設定は Go: Build Tags
や Go: Test Tags
あたりの項目で設定する。
settings.json だと
"go.testTags": "yourtesttag",
"go.buildTags": "yourtag",
vimなんかもビルドタグ指定しないとだめって聞いたけど、LSPの実装依存なんでしょうか。詳しいところは追ってないけど、JetBrainsでは難なく追ってくれてたのでハマった。正直、明示したら追わなくなる、デフォルトはビルドタグ無視して追って欲しい、と思うけどどうだろう。
なお、VSCodeのGo LSPが動いてないぞ?!の原因の第一(主観)は、何らかの理由でLSPが刺さっているので、再起動すると直ります(JetBrain製ではほぼ起きたことない)。