CSS の syntax check

WebService::Validator::CSS::W3C を使用すると、W3C CSS 検証サービスAPI を使ったコマンド等が簡単に作れる。

以下、やっつけで作った CSS のチェックツール

#!/usr/bin/perl
use strict;
use warnings;

use WebService::Validator::CSS::W3C;

my $file_name = $ARGV[0];
if (!$file_name) {
    print "Usage : css_checker.pl [CSS file name]?n";
    exit;
}

open my $fh, $file_name or die "Couldn't open $file_name: $!";
my $source;
while (<$fh>) {
  $source .= $_;
}
close $fh or die "Couldn't close $file_name: $!";

my $validator = WebService::Validator::CSS::W3C->new();
$validator->validate(
    string  => $source,
    warnings => 10,
) or die "Web Service response error.";

if (!$validator->errorcount && !$validator->warningcount) {
    print "Syntax OK!!?n";
    exit;
}

for my $string_of ($validator->errors, $validator->warnings) {
    print join(':', map {
        defined $string_of->{$_} ? $string_of->{$_} : '';
    } qw(line message)), "?n";
}

これを、vim から実行する為に .vimrc を下記のように修正した。

map ,t :call SyntaxCheck()<CR>

function SyntaxCheck()
  execute ':w'
  if &syntax == 'perl'
    execute ':!perl -cw %'
  elseif &syntax == 'ruby'
    execute ':!ruby -cW %'
  elseif &syntax == 'javascript'
    execute ':!/usr/local/bin/jslint --laxLineEnd %'
  elseif &syntax == 'yaml'
    execute ':!~/bin/yaml_checker.pl %'
  elseif &syntax == 'html'
    execute '!tidy -quiet -errors --gnu-emacs yes %'
  elseif &syntax == 'css'
    execute ':!~/bin/css_checker.pl %'
  endif
endf