SpiderMonkey 使って perl で簡単な Syntax チェック用の Script を書いてみた

デバック用に今更インストールしてみた。

curl -O http://ftp.mozilla.org/pub/mozilla.org/js/js-1.5.tar.gz
tar -zxvf js-1.5.tar.gz
cd ./js/src
make -f Makefile.ref
cp ./Darwin_DBG.OBJ/js /usr/local/bin/

Darwin_DBG.OBJ の箇所は環境によって違う。
js コマンドのコピーはお好きな場所へ・・・。
※ js-1.60.tar.gz でも同じように make できます。

#!/usr/local/bin/js
print( 'Hello' + 'World' );

と言う Script を書いて実行したりできます。

個人的に、簡単な確認は js コマンドで行い、最終的なデバックは FireBug で行う・・・という使い分けかなぁ。

って事で、こんなん作ってみました。

#!/usr/bin/perl
use strict;
use warnings;

use JavaScript::SpiderMonkey;

my $file_name = $ARGV[0];
if (!$file_name) {
    print "Usage : js_checker.pl [Java Script file name]?n";
    exit;
}

open my $fh, $file_name or die "Couldn't open $file_name: $!";
my $source = "?n";
while (<$fh>) {
  $source .= $_;
}
close $fh or die "Couldn't close $file_name: $!";

my $js = JavaScript::SpiderMonkey->new();
$js->init();
$js->property_by_path( 'window' );
$js->property_by_path( 'document' );
$js->property_by_path( 'navigator' );
$js->function_set( 'alert', sub { warn @_, "?n" } );
my $rc = $js->eval( $source );

$rc ?  print "Syntax OK!!?n" : print $@, "?n";

ブラウザの組み込みオブジェクトや組み込む関数は、適宜追加の方向で(w;
ただ、 document.getElementById() とか、どうしたら良いんだろうなぁ・・・。
(この問題は、id:cooldaemon:20070221 で解決)

.vimrc に下記を追加して使う予定。

autocmd Syntax js map <F4> :w<CR>:!~/bin/js_checker.pl -cw %<CR> | set makeprg=?~/bin/js_checker.pl? -wc? %

ちなみに、JavaScript::SpiderMonkey は、こんな感じでインストール。

cd [js ディレクトリが存在するディレクトリ]
curl -O http://search.cpan.org/CPAN/authors/id/T/TB/TBUSCH/JavaScript-SpiderMonkey-0.16.tar.gz
tar -zxvf JavaScript-SpiderMonkey-0.16.tar.gz
cd JavaScript-SpiderMonkey-0.16
perl Makefile.PL
make && make test && make install

インストールの詳細は、ここをよく読む。

参考URLは、下記の通り。