syntastic と Project::Libs でよしなにする話
vim plugin で syntastic という色々な言語の syntax check をしてくれるものがある
最近追ってなくて昔は syntax check をするスクリプトの設定が出来なかったので syntastic 側の perl の syntax check 周りの関数を読みこませないで時前のを読み込ますなどしてた
けどさっき見たら指定できるようになってたので
let g:syntastic_perl_efm_program = "perl " . path/to/file
として、
use strict; use warnings; use Getopt::Long; die "no arguments" unless @ARGV; my @libs; GetOptions("libdir" => \@libs); my $file = shift; my $args = @ARGV ? " " . join " ", @ARGV : ""; my $libs_str = join " ", @libs; my @lines = `perl -cw -M'Project::Libs lib_dirs => [qw/$libs_str/]' $file$args 2>&1`; for my $line (@lines) { chomp $line; if ( $line =~ /^(.*)\sat\s(.*)\sline\s(\d+)(\.|,\snear\s\".*\")$/ ) { my ($message, $file, $lineno, $rest) = ($1, $2, $3, $4); $message .= $rest if $rest =~ s/^,//; print "E:$file:$lineno:$message\n"; } }
のように Project::Libs を使って syntax check したものを指定されたフォーマットで吐くようにした。ちなみに E:.... って書くと error、W:... って書くと warning として表示されるけどめんどくさいので全部 E:... とした
これでどのディレクトリでファイルを開こうとよしなにやってくれるので便利ですね。