今までgolangでシンタックスや型のエラーがあった時にEmacsに表示するために、flycheck標準のgo用のcheckerを利用していた。しかし、これがだんだん遅くなってきて、結構いらつく感じになってきた。そこで、flycheck-gometalinterを使ったら解決したのでメモ。
flycheck-gometalinterとは
flycheck-gometalinter とは、gometalinter でシンタックスやlintのチェックをした結果を、Emacsのflycheckのインターフェースで表示してくれるもの。gometalinterはgolangのいろんなlintツール(例えばgofmtとかvetとかgotypeとか)を統合してlintを行ってくれるので、柔軟に設定して利用することができる。
flycheck-gometalinterを利用するように設定する
まずflycheck-gometalinterをインストールする。
M-x package-install RET flycheck-gometalinter
そして、重くならないようにfastオプションを付けるのと、テストファイルでも利用するようにelispで設定する。
(require 'flycheck-gometalinter) (flycheck-gometalinter-setup) ;; flycheckのcheckerのリストにgometalinterを追加 (setq flycheck-gometalinter-fast t) ;; only run fast linters (setq flycheck-gometalinter-test t) ;; use in tests files (add-hook 'go-mode-hook 'flycheck-mode) ;; go-modeでflycheckを利用するように
これだけで設定が終わり。
これをしておくだけで、シンタックスエラーや型エラーなどがあった時に、flycheckがその行にエラー表示をしてくれる。
便利。
なぜデフォルトのgo-modeのcheckerが利用されなくなるか
なぜflycheck-gometalinter-setupをするだけで、デフォルトのgo-modeのcheckerが利用されなくなるのだろうと疑問だった。それでドキュメントを見て見ると、
http://www.flycheck.org/en/latest/user/syntax-checkers.html#select-syntax-checkers-automatically
Flycheck picks the first syntax checker from this list which exists and supports the current major mode, and runs it over the current buffer.
と書かれていて、つまりgo-modeに紐づく最初のcheckerが利用されることが分かった。
さらにflycheck-gometalinter-setupのコード( https://github.com/favadi/flycheck-gometalinter/blob/c90ea1aba80ddfdf603c9ba731be302400fd6ba2/flycheck-gometalinter.el#L119 )を読むと、flycheck-checkersにgometalinterをadd-to-listしている。これによって、flycheck-checkersの一番最初にgometalinterが入るため、gometalinterがgo-modeに紐づく最初のcheckerとなる。
以上から、gometalinterのみピックアップされ、デフォルトのcheckerが利用されなくなるということが分かった。