Simple minds think alike

より多くの可能性を

【Golang】GoLandにstaticcheckを設定する

Go言語のlinter staticcheck をGoLandでも有効にする方法を調べてみました。 staticcheck.io

プラグインとして提供されていると楽そうですが、2022年6月現在 staticcheckプラグインはないので、IntelliJ IDEA製品の機能であるFile Watchersを使って有効にしています。

前提

  • staticcheck 2022.1.2 (v0.3.2)
  • GoLand 2022.1.3

導入

staticcheckインストール

$ go install honnef.co/go/tools/cmd/staticcheck@latest

インストールしたらバイナリのパスを確認します。

$ which staticcheck
/Users/t.morita/.anyenv/envs/goenv/shims/staticcheck

GoLandの設定

カスタムテンプレートを選択します。

プログラムの欄に、先ほど確認したstaticcheckのバイナリのパスを指定します。

最初ファイルタイプ「Goファイル」を見つけられなかったので、あれ!?どうやって設定するんだろうと思ったのですが、デフォルトで設定されているファイルタイプ「不明」の上の方にありました。

すべてのプロジェクトで staticcheck を有効にするために、レベルをグローバルに変更します。

確認

設定が終わると、ファイルタイプに該当するファイルを編集すると自動的に staticcheck を実行し、結果を出力してくれます。

以下のようなコードに対して staticcheck を実行して結果を確認してみます。

package main

import (
    "fmt"
    "log"
    "os"
)

func main() {
    f, err := os.Open("hoge.txt")
    fmt.Printf("%s\n", f.Name())

    if err != nil {
        log.Fatal(err)
    }
    f, err = os.Open("hoge.txt")
    fmt.Printf("%s\n", f.Name())
}

初回実行時、実行の出力タブに以下のように表示されていました。

「プロジェクトを信頼して実行」を選択すると、staticcheck が実行され、以下のようにエラーになった内容が表示されます。

エラーの内容を読むと err が使われていないことがわかるのでエラーチェックが漏れていることに気がつけそうです。

また、エラーのファイル:行数をクリックすると、エディタの該当行にフォーカスが当たってくれるのも便利です。

参考資料