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