JavaScript > JSLintをSpiderMonkeyで実行する方法

更新日 2011-12-14
広告

JavaScriptの静的コード解析ツールとして有名なJSLintを、SpiderMonkeyを利用して実行する方法を紹介します。

JSLintのウェブサイトに行けば、ブラウザ上でJSLintによるチェックを行えますが、いちいちコードをコピペするのは面倒です。シェル上でコマンド実行できれば、コピペの手間を省けます。

  • JSLintのサイト: http://www.jslint.com/
  • JSLintのダウンロードサイト: https://github.com/douglascrockford/JSLint

JSLintはJavaScriptで実装されています。そのファイル名はjslint.jsです。したがって、シェル上でJSLintを実行するには、JavaScript実行環境が必要です。今回は、SpiderMonkeyを利用します。(SpiderMonekyの使い方)

JSLintは、チェックするJavaScriptのソースコードを引数に取ります。つまり、「チェックしたいコードをJSLintに渡してやるコード」を、SpiderMonkeyで実行する必要があります。以下に、サンプルwrapper.jsを示します。

var MY_JSLINT_WRAPPER = {};

// 標準入力を受け取る。
MY_JSLINT_WRAPPER.readSource = function() {
    var line, 
        result = "";
    while ((line = readline()) !== null) {
	result += line + "\n";
    }
    return result;
};

// JSLintによるチェックを実行し、エラーを出力する。
MY_JSLINT_WRAPPER.doJsLint = function() {
    var result = JSLINT(MY_JSLINT_WRAPPER.readSource());
    JSLINT.errors.forEach(function(e) {
			      print(e.line + ", " + e.character + ", " + e.reason + ", " + e.evidence);
			  });
};

// JSLintを実行
MY_JSLINT_WRAPPER.doJsLint();

readline()関数は、SpiderMonkeyの独自関数です。標準入力からテキストを読み取ります。

wrapper.jsを普通にSpiderMonkeyで実行すると、変数JSLINTが見つからないというエラーが出ます。変数JSLINTは、jslint.js内で定義されているからです。jslint.jsを読み込んでwrapper.jsを実行してもよいのですが、パスの解決が少し面倒なので、ファイルを連結してしまいます。

test-jslint$ cat jslint.js wrapper.js > myjslint.js
それでは、作成したmyjslint.jsで、以下のbad.jsをチェックしてみます。
function stupid(x) {
  y = x
}
bad.jsをチェックするコマンドは以下のとおりです。(コマンドjsは、SpiderMonkeyの実行ファイルです)
jslint-test$ js -f myjslint.js < bad.js
2, 3, Missing 'use strict' statement.,   y = x
2, 3, Expected 'y' at column 5, not column 3.,   y = x
2, 3, 'y' was used before it was defined.,   y = x
2, 8, Expected ';' and instead saw '}'.,   y = x
ちゃんとチェックしてくれました!
update 2011-12-21

Mac OSの場合、MacPortでSpiderMonkeyをインストールできます。 私の環境(Mac OS X 10.6.8)ではバージョン1.7.0_5がインストールされましたが、上記のwrapper.jsスクリプトは上手く動きませんでした。 具体的には、readline()関数で標準入力からファイルを読み込んだ際に、'EOF'をnull判定できず、whileループを抜けられませんでした。

SpiderMonkeyのサイトからソースをダウンロードして、ビルドして試してみたら、問題なく動作しました(古いSpiderMonkeyのバグだったのか??)。

ソースからのビルドは、「SpiderMonkeyのインストール」で紹介した方法と同じ手順で可能です。

広告
お問い合わせは sweng.tips@gmail.com まで。
inserted by FC2 system