先日、このブログで Golang の linter を使ってみたエントリを書いた。
すると @r_rudi さんから gometalinter という便利なものがあることを教えてもらえた。
@momijiame https://t.co/VkWeIVx6pX をどうぞ
— shirou - しろう (@r_rudi) 2016年3月31日
何それ?
gometalinter は Golang の色々な linter を一度に実行できてしまう優れもの。
インストール
gometalinter は go get コマンドでさくっとインストールする。
$ go get github.com/alecthomas/gometalinter
初期設定
最初に gometalinter に --install と --update オプションをつけて実行する。 これで対応している linter をひと通りインストールしてくれる。
$ gometalinter --install --update Installing: gotype aligncheck dupl interfacer golint structcheck ineffassign gosimple goimports errcheck unconvert goconst varcheck deadcode gocyclo lll
使ってみよう
ツッコミどころのあるソースコードを用意して動作を確認してみよう。
$ cat < 'EOF' > helloworld.go package main import ( "fmt" ) func main() { n := 1 // 使われない変数 fmt.Println("Hello, World!") } EOF
上記のファイルを用意したのと同じディレクトリで gometalinter コマンドを実行する。
$ gometalinter . helloworld.go:8:2:warning: n assigned and not used (ineffassign) helloworld.go:8:2:error: n declared but not used (gotype) helloworld.go:8:2:warning: n declared but not used (interfacer) helloworld.go:8:2:warning: unused struct field n declared but not used (structcheck) helloworld.go:8:2:warning: redundant type conversion (unconvert) helloworld.go:8:2:warning: n declared but not used (aligncheck)
ありとあらゆる linter たちが一斉にソースコードにツッコミを入れてくれた。 指摘内容の右側のカッコに囲まれているのが、それを指摘した linter の名前になっている。
まとめ
- gometalinter を使うと Golang の様々な linter を一度に実行できる
べんり。