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は、下記の通り。