📝

VSCodeでgopls使用時に勝手にimportが削除される

2020/09/28に公開

環境

  • Windows10
  • go version go1.15.2 windows/amd64
  • vscode-go経由でgopls導入済み
  • ローカルformatTool: gofmt

VSCodeのGoplsの設定部分は以下のドキュメントに従って設定したものとします
https://github.com/golang/tools/blob/master/gopls/doc/vscode.md

問題

保存時に勝手にimportが整理される(というよりlintかかってる....?)
後で実装する部分とかが削除されて非常に迷惑

原因切り分け

いろいろ調査してみたところ、Language server使用時に上記問題が発生することがわかりました。

なので、犯人はたぶんgopls...?と結論付けました

Issue

やっぱり同じ問題を抱えていた人がいました

https://github.com/microsoft/vscode-go/issues/2498

However, when using gopls the following behavior happens:

  1. Files are always formatted on save
  2. Imports are reordered

解決

上記Issueの解決策として、"source.organizeImports": falseというのがありました。

設定の該当部分をfalseにしたところ、意図した動作をするようになりました。

最終的な私のsettings.jsonは以下です

{
    "go.formatTool": "gofmt",
    "go.lintOnSave": "off",
    "go.lintTool": "golangci-lint",
    "go.useLanguageServer": true,
    "[go]": {
        "editor.formatOnSave": false,
        "editor.codeActionsOnSave": {
            "source.organizeImports": false
        },
        // Optional: Disable snippets, as they conflict with completion ranking.
        "editor.snippetSuggestions": "none"
    },
    "[go.mod]": {
        "editor.formatOnSave": false,
        "editor.codeActionsOnSave": {
            "source.organizeImports": true
        }
    },
    "go.languageServerExperimentalFeatures": {
        "format": false,
        "autoComplete": true
    },
    "gopls": {
        // Add parameter placeholders when completing a function.
        "usePlaceholders": true,

        // If true, enable additional analyses with staticcheck.
        // Warning: This will significantly increase memory usage.
        "staticcheck": false
    }
}

以上です

Discussion