Emacs
C
C++

flycheck で C/C++ のエラーチェック定義を追加する

More than 1 year has passed since last update.

皆さん,flymake は使ってますか? flymake は編集中にリアルタイムで文法エラー・警告を指摘してくれる Emacs の機能です.Emacs でプログラムを書く人にはおなじみの機能のはず (知らなかった人は是非使ってみてください).

しかし,この flymake は少々設定が面倒です.そこで,いくつかの言語の flymake 設定をまとめてくれているのが flycheck になります.

flycheck には最近 C/C++ に対応しました.cppcheck という静的解析ツールによる警告などを表示してくれます.ただ,この cppcheck はシンタックスエラーを全て指摘してくれるわけではないようです (逆にコンパイラだけでは指摘できないような部分はチェックしてくれるんですけどね).

そこで,コンパイラによる通常のエラーチェックを行う定義を書きました.それが以下のコードになります.

(require 'flycheck)

(flycheck-define-checker c/c++
  "A C/C++ checker using g++."
  :command ("g++" "-Wall" "-Wextra" source)
  :error-patterns  ((error line-start
                           (file-name) ":" line ":" column ":" " エラー: " (message)
                           line-end)
                    (warning line-start
                           (file-name) ":" line ":" column ":" " 警告: " (message)
                           line-end))
  :modes (c-mode c++-mode))

flycheck-define-checker というのがエラーチェックの定義を追加するマクロです.c/c++ が定義名,その次の文字列がコメント,:command がコンパイラや静的解析ツールのコマンドと引数,:error-patterns がコンパイラによるエラー出力の正規表現,そして :modes がその定義を利用するモードです.定義2行目のコメント文字列は必須なので注意してください.

flycheck に他の言語のエラーチェックを追加したい人も,このコードでだいたい何をすればいいかわかると思います.詳細は マニュアル を参考にしてください.flycheck-define-checker の各要素の説明は 3.1 Definition of syntax checkers に書かれています.

ちなみに,この定義を (flycheck-select-checker 'c/c++) を C/C++ のフックに書けば C/C++ モードで有効にすることができます (もちろん自動で flycheck を有効にするなら (flycheck-mode t) も書いてください).