Emacs、「モダン」という言葉に誘われて flymake から flycheck に乗り換えたときに Perl の @INC 周りの設定で少しがんばったのでメモ。
解決したいこと
my-project/scripts/poyo.pl
とかを編集しているとき、my-project/lib
や my-project/local/lib/perl5
(Carton でインストールしたモジュールが入ってる)は @INC に含まれていないので、例えば自分のプロジェクト内のモジュールを use MyApp;
という具合で読み込もうとすると flycheck さんに怒られてしまう。これを解決したい。
解決策
解決策を探してみても、flymake の話が少々出てくるくらい。flycheck の話はなかなか出てこなかった。それでもめげずに探したところ、以下のリンクに辿り着いた。
どうやら、flycheck-define-checker
というのを使うことで、エラーチェックの定義を追加することができる模様。見よう見まねで、できるだけシンプルに以下のような設定を書いてみた。
(flycheck-define-checker perl-project-libs
"A perl syntax checker."
:command ("perl"
"-MProject::Libs lib_dirs => [qw(local/lib/perl5)]"
"-wc"
source-inplace)
:error-patterns ((error line-start
(minimal-match (message))
" at " (file-name) " line " line
(or "." (and ", " (zero-or-more not-newline)))
line-end))
:modes (cperl-mode))
Project::Libs、便利である。で、これを cperl-mode-hook
として登録する。
(add-hook 'cperl-mode-hook
(lambda ()
(flycheck-mode t)
(setq flycheck-checker 'perl-project-libs)))
すると、きちんと解決できていた。めでたし。