きときと

日々のあれこれ ソフトウェアエンジニア

VSCode での Go 開発環境設定 gopls(Language Server)で設定してみる

VSCode での環境設定について改めて調べたので、内容を備忘録としてまとめます。

これまで VSCode で go のコードを書く際の補完やフォーマットを godoc goimports で行うよう設定していましたが、 Language Server(LSP) で行うよう再設定しました。

環境

$ go version
go version go1.12.7 darwin/amd64

$ code -v
1.36.1

変更前

変更前の settings.json です。
前述の通り補完やフォーマットを godoc goimports で行うよう設定しています。

{
  "[go]": {
    "editor.formatOnSave": true
  },
  "go.autocompleteUnimportedPackages": true,
  "go.docsTool": "godoc",
  "go.formatTool": "goimports",
  "go.formatFlags": ["-w"]
}

変更内容

それでは Language Server で行うようにしていきます。

gopls を インストールする

gopls とは、 go の Language Server Protocol(LSP) の実装です。
github.com

go get します。

$ go get golang.org/x/tools/gopls

settings.jon の更新

下記を参考に settings.jon を更新していきます。

下記の様に更新しました。

{
  "go.useLanguageServer": true,
  "go.alternateTools": {
    "go-langserver": "gopls"
  },
  "[go]": {
    "editor.formatOnSave": true,
    "editor.codeActionsOnSave": {
      "source.organizeImports": true
    }
  },
  "go.autocompleteUnimportedPackages": true,
  "gopls": {
    "usePlaceholders": true
  }
}

詳細

気になる設定の詳細を見ていきます。

  • "go.useLanguageServer": true
    Language Server を使用するかのフラグ。
    true の場合、 go.docsTool go.formatTool などの設定は無視される様でした。

  • "go.alternateTools": {"go-langserver": "gopls"}
    どの Language Server の実装を使用するかの設定。 bingo も設定できる様ですが、GitHubを見ると gopls に統合される模様なので、将来的に設定する必要がなくなるかもしれません。
    https://github.com/microsoft/vscode-go#setting-to-change-the-language-server-being-used

  • "gopls": {"usePlaceholders": true}
    補完を行ったとき、メソッドの引数にプレースホルダーを入力してくれます。
    例えば fmt.Printf の場合、下記になります。

fmt.Printf(format string, a ...interface{})

 設定すると↓の様に警告が出ましたが、問題なく動作しました。
 f:id:EF-0512:20190715182709p:plain

まとめ

まだまだ設定内容の詳細が調べきれていないものもありいい感じの設定かはわからないですが、ひとまず自動フォーマットやコード補完が一通り動く様になりました。
ドキュメントなどまだ情報が少ないですが、GitHubリポジトリや issue を見ていると更新の流れも速そうなので、ウォッチしても更新していこうと思います。

参考

github.com
github.com
github.com mattn.kaoriya.net