79
60

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-02-08

gopls とは

gopls(Go Please)は Go が公式サポートしている Language Server です。現在開発が活発に進んでおり 2020年2月9日時点 での最新バージョンは v0.3.1 となっています。

VSCode の Go拡張 における Language Server について

元々 VSCode の Go拡張である microsoft/vscode-go のデフォルトの Language Server は sourcegraph/go-langserver だったのですが、go-langserver の内部で利用されていた nsf/gocode の開発終了を受け、こちら で話し合いがなされた末に 2019年3月に gopls へ 変更 となりました。

なお、2020年2月9日時点での vscode-go の最新バージョン v0.13.0 では、Language Server の使用が デフォルト無効化 となっているので使用したい場合には有効化する必要があります。

Language Server の有効化方法

マニュアル に従い VSCode で以下の作業を実施します。
VSCode に vscode-go がインストールされていない方はインストールを終えた後で実施してください。

1. Language Server の有効化

Code > Preferences > Settings (cmd+,) を開き go.useLanguageServer を検索して有効化する。
スクリーンショット 2020-02-09 15.15.19.png

2. gopls のインストール

View > Command Palette (cmd+shift+P) を開き Go: Install/Update Tools を検索した後で gopls を選択してインストールする。
スクリーンショット 2020-02-09 15.16.15.png
スクリーンショット 2020-02-09 15.16.29.png
スクリーンショット 2020-02-09 15.16.48.png

gopls v0.3.1 がインストールされました。

$ gopls version
golang.org/x/tools/gopls v0.3.1
    golang.org/x/tools/gopls@v0.3.1 h1:yNTWrf4gc4Or0UecjOas5pzOa3BL0WDDyKDV4Wz5VaM=

3. 任意の設定を適用

こちらは任意なのでスキップしても問題ないです。

View > Command Palette (cmd+shift+P) を開き Preferences: Open Settings (JSON) を検索して settings.json に任意の設定を適用する。こちら を参考にして以下の設定を適用した例となります。

// For gopls
"go.useLanguageServer": true,
"[go]": {
    "editor.formatOnSave": true,
    "editor.codeActionsOnSave": {
        "source.organizeImports": true,
    },
    // Optional: Disable snippets, as they conflict with completion ranking.
    "editor.snippetSuggestions": "none",
},
// Global settings for gopls
// https://github.com/golang/tools/blob/master/gopls/doc/settings.md
"gopls": {
    // === Officially supported Settings ===

    // This controls the information that appears in the hover text.
    "hoverKind": "SynopsisDocumentation",
    // If true, then completion responses may contain placeholders for function parameters or struct fields.
    "usePlaceholders": true,
    // This controls where points documentation for given package in `textDocument/documentLink`.
    "linkTarget": "pkg.go.dev",

    // === Experimental Settings ===

    // If true, it enables the use of the staticcheck.io analyzers.
    // Warning: This will significantly increase memory usage.
    "staticcheck": false,
    // If false, indicates that the user does not want documentation with completion results.
    "completionDocumentation": true,
    // If true, the completion engine is allowed to make suggestions for packages that you do not currently import.
    "completeUnimported": true,
    // If true, this turns on the ability to return completions from deep inside relevant entities, rather than just the locally accessible ones.
    "deepCompletion": true
}

スクリーンショット 2020-02-09 15.37.36.png
スクリーンショット 2020-02-09 15.39.08.png

4. 設定の適用

設定を適用するために VSCode を Reload する。これにより Language Server が有効化されます。開発が捗りそうです。

おまけ: Go のコード補完ツールの歴史

Big Sky :: gocode やめます(そして Language Server へ) がとてもわかりやすく非常に参考になったので、理解するがてら時系列を整理してみました。現時点では gopls を利用していくのが良さそうです。

  1. Go 1.10 以前は gocode がデファクトスタンダード
  2. Go 1.10 に追加されたビルドキャッシュの関係で gocode の開発が終了
  3. それと同時に gocode を利用していた go-langserver の開発にも影響が出た
  4. これらの状況を受けて gocode の fork で mdempsky/gocodestamblerre/gocode が登場
  5. Go の公式 Language Server として golsp が登場(stamblerre/gocode の人が開発を担当)
  6. 別の Go の Language Server として saibing/bingo が登場
  7. golsp 開発者が bingo 開発者にコラボレーションしようと 打診 する
  8. golsp が gopls(Go Please) に rename される
  9. コラボレーションが了承されて golang/tools を fork し bingo の機能を gopls に移植した saibing/tools が登場
79
60
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
79
60

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?