Flycheckでモダンなシンタックスチェック

  • 159
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

Flycheck は、コーディング中にリアルタイムでコードのシンタックスチェックやスタイルチェックを行なってくれる拡張機能です。以下のように、エラーが検出された行には ! が付いて、そこにカーソルをあわせるとエラー内容が表示されます。

似たような拡張として Flymake がありますが、 Flycheck はデフォルトで多くの言語のシンタックスチェックに対応していることが特徴です。

flycheck_screenshot.png

Flymake も Flycheck も使ったことがない、という方は Flycheck を使ってみることをおすすめします。

インストール

ELPAパッケージを MELPA から手動でインストールするか、 CaskEl-Get を使うと良いみたいです。

ELPA
M-x package-install RET flycheck
Cask
(source gnu)
(source melpa)

(depends-on "flycheck")

Cask は 結構便利で、パッケージ管理にはおすすめです。Flycheck に限った話じゃないですが。

設定

Flymake と比べると Flycheck が使えるようになるまでの設定はかなりシンプルです。 init.el に以下の一文を加えるだけで動きます。

init.el
(add-hook 'after-init-hook #'global-flycheck-mode)

あとは、対応している言語のメジャーモードが起動すると、自動的にシンタックスチェックが走るようになります。

使い方

エラーが出ているかどうか

モードラインの FlyC:xx/yy を見るとエラーが出ているかわかります。 xx はエラーの数で、 yy はワーニングの数です。

エラー箇所にジャンプする

flycheck-next-error で次のエラー箇所に、 flycheck-previous-error で前のエラー箇所にジャンプすることができます。よく使うので、キーバインドを設定しておいた方が良いでしょう。

使用するシンタックスチェッカーを選ぶ

基本的には、 Supported languages に載っているシンタックスチェッカーはデフォルトでほとんど有効になっています。
ただ、ものによっては自分で設定を加えたりしないと有効にならないものもあります。例えば、 javascript-gjslint はデフォルトでは有効になっていません。

M-x flycheck-select-checker RET javascript-gjslint を実行することで有効化することもできますが、この方法だと逆に javascript-jshint などが無効になってしまいます。
チェッカーを追加する形で利用するには、 init.el に以下のような設定を加えます。

init.el
(flycheck-add-next-checker 'javascript-jshint
                           'javascript-gjslint)

ファイル毎に別々の設定を適用する

このファイルだけはあのチェックを無効化したい、有効化したい。などの設定は以下のようにコメントで Local Variables: End: で囲むことで記述できます。例えば、以下はこのファイルのシンタックスチェッカーを python-pylint に設定しています。

# Local Variables:
# flycheck-checker: python-pylint
# End:

ちなみにこれは Flycheck 独自の機能ではなくて、 Emacs の機能のようです。 Specifying File Variables

Flycheck extension

flycheck-pos-tip

私が Flycheck を使い始めてとりあえず気になったのが、エラー内容がエコーエリアに表示されることでした。エコーエリアに表示されると視点の移動が結構大きいので、その場にツールチップで表示してくれないかなーと思ったので、自分で flycheck-pos-tip というものを作ってみました。

flycheck-pos-tip_screenshot.png

こんな感じで表示されます。

インストールと設定

MELPA に登録してあるので、本体と同じようにインストールできます。逆に Marmalade には登録してないです。

ELPA
M-x package-install RET flycheck-pos-tip
Cask
(source gnu)
(source melpa)

(depends-on "flycheck")
(depends-on "flycheck-pos-tip")

init.el には以下のような設定を加えます。 Flycheck はエラーを表示するための関数をカスタマイズできるように設計されていたので楽ちんです。

init.el
(eval-after-load 'flycheck
  '(custom-set-variables
   '(flycheck-display-errors-function #'flycheck-pos-tip-error-messages)))

ぜひ使ってみてください。