金曜日, 2 月 13th, 2009 | Author: djodjo
ご存知のとおりオブジェクトリテラルを各際に以下のように最後にカンマがついたままの場合、Firefoxなどは問題ないですが、IEでは読み込み時にエラーとなります。
ですが、結構、埋め込んでしまうバグなので自動的に見つけようとして書いたPerlプログラムがこちら。
なぜ、Perlかは….慣れているからってだけです。
デフォルトでカレントディレクトリ配下の*.jsファイルを探索しに行くので、プロジェクトの直下とか置いておけば叩くだけ。
Windowsでも動きます。
#!/usr/bin/perl
BEGIN{
use strict;
use warnings;
use utf8;
use Getopt::Std();
use File::Basename;
}
main();
sub main {
my $dir = &getOpt();
my $flist = [];
&getFilelist($dir,$flist,'\.js$');
printf("%6s\t%s\n",'line','file');
&commaCheck($_) for(@{$flist});
print "done.\n";
}
sub commaCheck{
my $file = shift;
open(FH,"<:utf8",$file) or dei $!;
my $line = 0;
my $flg_comma = 0;
my $comma_line = 0;
my $flg_comment = 0;
while(<FH>){
$line++;
$flg_comment = 1 if(/\/\*/);
$flg_comment = 0 if(/\*\//);
next if(/\s*\/\//);
next if($flg_comment);
if(/,\s*$/){
$flg_comma = 1;
$comma_line = $line;
next;
}
if($flg_comma){
if(/^\s*\}/){
printf("%6d\t%s\n",$comma_line,$file);
}
$flg_comma = 0;
}
}
close(FH);
}
sub getFilelist{
my $cd = shift;
my $flist = shift;
my $regexp = shift;
if( -d $cd ){
return if($cd=~/^.+\/\.{1,2}$/);
opendir(my $DIR,"$cd") or die $!;
foreach my $file (readdir($DIR)){
&amp;amp;amp;getFilelist("$cd/$file",$flist,$regexp);
}
closedir $DIR;
}else{
return if($cd !~ /$regexp/);
push(@{$flist},$cd);
}
}
sub getOpt {
my $op = {};
&amp;amp;amp;Getopt::Std::getopts("hd:", $op);
&amp;amp;amp;help() if($op->{h});
my $basepath = $op->{p} ? $op->{p} : '.';
return ($basepath);
}
sub help {
my $myname = &amp;amp;amp;File::Basename::basename($0);
my $msg = shift;
print "*** ERROR *** $msg\n" if($msg ne '');
print <<_HELP_;
usage : $myname -p base_path
このスクリプトは、JavaScriptファイルに、カンマが余計についている
オブジェクトリテラルを探しだします。
-p パス:起点となるパス ex.-d .
_HELP_
exit 1;
}
1;
見つからないパターンがあっても責任取れませーん。あしからず。
Category: JavaScript
