node-jslintでflymake - すぎゃーんメモ で設定した、node-jslintによるflymakeを使っていたのだけど、
var util = require('util');
とかに対して警告を出してきてちょっとイラっとする。どうもnode-jslintで使われているjslintがちょっと古いらしく、"util"がかつてnode.jsでpredefinedなglobalsだった、というのが残ってしまっているらしい。本家ではすでに修正されている模様。
Assume Node.js option falsely assumes global `util` · Issue #42 · douglascrockford/JSLint · GitHub
で、それを取り込んで更新してもらえれば良いのだけど 折角なのでnodelintに鞍替えしてみた。
https://github.com/tav/nodelint
こちらもnode-jslint同様にコマンドラインツールとしてjsファイルに対して実行することができるのだけど、細かい設定はconfigファイルのパスを渡す形になる。flymakeで使うにはちょっと残念…とは思ったもののとりあえず設定してみた。
設定は$HOME/local/etc/nodelint_config.js
にファイルを作り(実際には$HOME/.emacs.d/inits/etc/nodelint_config.js
においてそこにシンボリックリンクを貼ったけど それはgithub的な事情)
var options = { vars: true, error_prefix: "", error_suffix: ": " };
と自分好みの設定を書く。flymakeでエラーパターンを解析するためにerror_prefix
とerror_suffix
はシンプルにしておくのが良さげ。
で、flymake用の設定を書く。
(require 'flymake) (add-to-list 'flymake-allowed-file-name-masks '("\\.js\\'" flymake-js-init)) (defun flymake-js-init () (let* ((temp-file (flymake-init-create-temp-buffer-copy 'flymake-create-temp-inplace)) (local-file (file-relative-name temp-file (file-name-directory buffer-file-name)))) (list "nodelint" (list "--config" (concat (getenv "HOME") "/local/etc/nodelint_config.js") local-file)))) (defun flymake-js-load () (interactive) (setq flymake-err-line-patterns (cons '("^\\(.+\\), line \\([[:digit:]]+\\), character \\([[:digit:]]+\\): \\(.+\\)$" 1 2 3 4) flymake-err-line-patterns)) (flymake-mode t))
ほとんどjslint用の設定と変わらず、コマンドラインオプションを調整したのと、警告出力パターンの変更にあわせてflymake-err-line-patterns
のところを調整したくらい。
しばらくこれで使い続けてみます。