SpiderMonkey + JSLint + Vim
二年前に SpiderMonkey 使って perl で簡単な Syntax チェック用の Script を書いてみた 改訂版 と言う記事を書いたのですが、部下に JS を教える為に環境構築していたら、Perl Module の JavaScript と JavaScript::JSLint のテストが通らずイラっとしたので、jslint: The JavaScript Verifier で配布されている fulljslint.js を流用してコマンドを作って Vim から使えるようにしたのでメモを残します。
fulljslint.js の設置
適当にダウンロードしておく。
% mkdir -p ~/bin/js % curl http://www.jslint.com/fulljslint.js > ~/bin/js/fulljslint.js
fulljslint.js のラッパーを作成
~/bin/js/ 配下に jslint.js という名前で下記を保存。
JSLINT.errors に null 要素が含まれる事があったので、その対応を追加しました。
load(environment.HOME + '/bin/js/fulljslint.js'); (function (file, source) { if (!file || !source) { print('Usage: jslint.js [File Name] [Source]'); quit(1); } if (JSLINT(source, {passfail: false})) { print('All good.'); quit(); } JSLINT.errors.forEach(function (error) { var message; if (error === null) { return; } [ file, error.line + 1, error.character + 1, error.reason ].forEach(function (elem) { if (message) { message += ':' + elem; } else { message = elem; } }); print(message); }); })(arguments[0], arguments[1]);
JSLINT を使用する為に、ファイル名やソースをコマンドラインパラメータから取得している。
ソース取得用の Shell Script を作成
~/bin/ 配下に jslint.sh という名前で下記を保存。
#!/bin/sh if [ ! -f $1 -o ! -r $1 ]; then echo "Usage: $0 [JavaScript Source File]"; exit 1 fi js ~/bin/js/jslint.js $1 "`cat $1`" exit 0
SpiderMonkey のファイル操作の方法が解れば、このスクリプトは不要なんだけどなぁ
試してみる
function Person () {} Person.prototype.say = function () { print('jslint is cool.'); } var cooldaemon = new Person; cooldaemon.say();
> ~/bin/jslint.sh /path/to/test.js /path/to/test.js:5:2: Missing semicolon. /path/to/test.js:7:28: Missing '()' invoking a constructor.
Vim から使う
set makeprg=~/bin/jslint.sh\ %