omoonのブログ

旅の思い出を写真とともに書いてみるか。

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」になりました。

母さん、僕は間違っていないでしょうか?

参考)