JavaScript::Swellを使ってvimでJavaScriptを整形する
vimでperltidyを使い始めてから、何でもかんでもtidyしたくなる。今度はJavaScript。ちゃんとありました。しかもperlで。cpanに上がってる。
http://search.cpan.org/~yappo/JavaScript-Swell-0.01/lib/JavaScript/Swell.pm
まずはインストール。
cpan -i JavaScript::Swell
で、このサイトから拝借して、~/bin/js_swell.plを作成
#!/usr/bin/perl use strict; use JavaScript::Swell; my $data; while (<>) { $data .= $_; } print JavaScript::Swell->swell($data);
で、vimから
:%! ~/bin/js_swell.pl
とすると、うまく整形される。が、インデントが「2」みたいだ。これ「4」にしたい。
Swell.pmのソースを見てみると
121 sub add_indent {shift->{parser_state}->{indent} += 2} 122 sub dec_indent {shift->{parser_state}->{indent} -= 2}
ここが、その設定のようだ。よし、書き換えよう!と一瞬思ったのだけれど、ここはひとつ「継承」というのをやってみよう、ということで、やってみた。
JavaScript::Swellを継承して、MyJsSwell.pmを作成。
package MyJsSwell; use strict; use warnings; use base qw(JavaScript::Swell); sub add_indent {shift->{parser_state}->{indent} += 4} sub dec_indent {shift->{parser_state}->{indent} -= 4} 1;
先ほどの、~/bin/js_swell.plを書き換える。
#!/usr/bin/perl use strict; use lib qw(/Users/omoon/bin); use MyJsSwell; my $data; while (<>) { $data .= $_; } print MyJsSwell->swell($data);
これで、もう一度、
:%! ~/bin/js_swell.pl
で、インデントが「4」になりました。
母さん、僕は間違っていないでしょうか?
参考)