kakts-log

programming について調べたことを整理していきます

vscode: Goのコードで定義元にジャンプさせる

概要

vscodeでGoのコードを書く際に、関数などの定義元にジャンプさせたい時の設定。

手順

Go公式のvscode拡張機能を有効にする

まず、Go公式のvscode拡張機能が有効になっているか確認します。 github.com

f:id:kakts:20220303014031p:plain
Goの公式の拡張機能が有効になっているか確認する

上記のvscode拡張機能で、goplsというGo公式のLanguage Serverもバンドルされています。

memo Language Server Protocolというプロトコルについて

https://microsoft.github.io/language-server-protocol/ Language Server Protocolは、IDEとLanguage Serverの間で使われるプロトコルです。
自動補完や、関数などの定義へのジャンプ、関数などの呼び出し元を探したりなど、言語ごとの機能を提供するものです。 Go Language Serverは、このプロトコルに準拠しており、Goに関する上記の機能を提供するものです。 Go Language Serverの1つとして、現在Go公式でサポートしているgoplsがよく使われているようです。

VSCODEでGo Language Serverを有効にする

vscodeにおいてgoplsのセットアップが済んでいますが、vscodeのデフォルトだと、goのLanguageServerが無効になっています。
これが有効になっていないとコード補完やコードの定義元へのジャンプが使えません。
そのため、vscodeの設定でこれを有効にしてあげるhつ用があります。

github.com Goの拡張機能のドキュメントに記載してある通り、 go.useLanguageServerをtrueにしてあげると有効になります。

この記事では解説しませんが、Linterの設定もできるようです。

https://github.com/microsoft/vscode-go/tree/0.13.0#linter

手順

  • Command + Shift + Pでコマンドパレット表示
  • open settingを入力し、設定画面を出す。 f:id:kakts:20220303015437p:plain
  • jsonで設定を追加する
{
...
    "go.useLanguageServer": true,
...
}

これにより、特にエディタ再起動しなくてもジャンプできるようになります。

この設定を入れても定義元ジャンプが利用できない場合は、原因の1つとしてプロジェクトルートにgo.modが存在していないことが挙げられるようです。

bmf-tech - vscodeでgoのLanguage Serverを有効にしたらコード定義元ジャンプができなくなった

参考

VSCode で Go の Language Server である gopls を有効にする - Qiita