vimでsyntaxチェック

Vimで書いているJavaScriptの文法チェックをVimの上で出来たらなーと調べてみたら
SpiderMonkeyを使ってJavaScriptの文法チェクが出来るスクリプトがあった.

設定方法はここ

Mac OS X (Leopard)ではSpiderMonkeyをMacPort経由でインストールすれば参考サイトと設定は一緒.
せいぜいファイルパスを適時読み替えるくらい*1
VimはOS標準のものを使ってます.

以下,導入ログ.

$ sudo port install spidermonkey
$ wget http://www.jslint.com/fulljslint.js
$ mkdir ~/src/js
$ mv fulljslint.js ~/src/js


javascriptのコードをfulljslint.jsに渡すためのコード.*2
~/src/js/runjslint.js

load('/Users/hoge/src/js/fulljslint.js');
 
var body = arguments[0];
 
var result = JSLINT(body);

if (result) {
 print('All good.');
} else {
 print('Problems:');
}

print(JSLINT.report());

出力結果がhtmlタグを含んでいるので,整形し直す.
# pythonじゃなくったっていいんだけど,ここは参考先に従っておく.
~/src/python/format_lint_output.py*3

#!/usr/bin/python
import sys
import re
 
def format_lint_line(line):
 line = line.replace('<p>', '\n')
 line = line.replace('&nbsp;', ' ')
 return line
 
def remove_html_tags(data):
 p = re.compile(r'<.*?>')
 return p.sub('', data)
 
for line in sys.stdin:
 print remove_html_tags(format_lint_line(line))

あとは.vimrcに書いておく.
:jsとすると,vimで編集中のjavascriptの文法チェックをしてくれる.
~/.vimrc

cabbr js !js ~/src/js/runjslint.js "`cat %`" \| ~/src/python/format_lint_output.py

*1:/home/hoge/...と書いて動作しなかったのは内緒.Macでは/Users/hoge/としなきゃ.

*2:load()のパスに気をつけて.

*3:実行権限付け忘れで詰まらないように... :-p