Compiler::Lexer をつかって Perl::MinimumVersion::Fast をかいてみた
papix さんのブログをよんでいたところ Compiler::Lexer というものの存在 をしった。http://blog.papix.net/entry/2013/04/30/223840
Compiler::Lexer という Perl5 コードの Lexer を goccy さんがかいている そうだ。これをもちいて Perl::MinimumVersion をかきなおしてみた。
Perl::MinimumVersion は PPI をつかったライブラリで、Perl のコードを解 析してそのコード自体が必要とする Perl のバージョンを判定するものだ。こ れは Test::MinimumVersion を経由して、リリース時に意図せずに //
や ~~
などを 5.8 用のライブラリでつかってしまっていないかを確認するのに やくだつ。実際 Minilla でもつかっているのだが、便利だ。
しかし PPI 自体が遅いというところもあり、より高速な alternative implementation があれば、よりうれしいというのも事実。
そこに Compiler::Lexer の登場である。朗報だ!!
というわけでさっそく実装してみた。もともと、「このバージョン以後でしか つかえない言語機能」の検出にパーサーはオーバースペック。トーカナイザで 十分なのだ。
というわけでできあがった実装がこちら。 https://github.com/tokuhirom/Perl-MinimumVersion-Fast
まだ、Compiler::Lexer 自体が開発中だし CPAN にもあがってないのでこのラ イブラリも実用段階ではないが、こういったコード解析系が簡単にかける上に、 PPI より高速に動作するのならばありがたい話だ。
Compiler::Lexer の今後に要注目だといえよう。