読者です 読者をやめる 読者になる 読者になる

初代Masteries

きっとモヒカンにもなれないお前たちに告げる!!!

Test::UsedModules::Fastに心が折れたので, Test::UsedModulesの紹介をします

moznionくんが書いたTest::UsedModulesを, Compiler::Lexerを使って高速化しようと思ったのですが, いろいろと辛い事になって諦めております ...ので, 今日はTest::UsedModulesの紹介をしたいと思います.

皆さん, Perlでモジュールとかプロダクトとかを書いていて, こんな事で悩んだことはありませんか?
「アレ, このモジュールuseしてるけど, 実際に内部で使ってたっけ...?」

必要のないモジュールは, use/requireしたくないですよね.
そういう時に便利なのがコレ, Test::UsedModules!

package Sample::UsedModules;
use 5.008005;
use strict;
use warnings;

use List::Util qw/max/;
use List::MoreUtils;
use Encode;

our $VERSION = "0.01";

sub sample {
    my $strings = shift;
    my $encoded_strings = decode_utf8($strings);

    my $max = max map { length $_ } (split /,/, $encoded_strings) || ();

    return $max;
}

1;

たとえば, こういうコードがあったとします(すごい適当に書いてます).
中では, Encodeが提供するdecode_utf8とList::Utilが提供するmaxを使っていますが, List::MoreUtilsの機能は一切使っていません.

Test::UsedModulesを使えば, このList::MoreUtilsが使われていない, ということを検出できるのです.

use strict;
use warnings;
use utf8;

use Test::UsedModules;

use Test::More;

all_used_modules_ok();

done_testing;

こういう感じでテストを書いて, テストを走らせると...

1..1
# Test::UsedModules failed: 'List::MoreUtils' is not used.
not ok 1 - lib/Sample/UsedModules.pm
#   Failed test 'lib/Sample/UsedModules.pm'
#   at t/01_usedmodules.t line 9.
# Looks like you failed 1 test of 1.

こういう感じで, Sample/UsedModules.pmの中で, List::MoreUtilsが使われていない... と教えてくれます.

まとめ

moznion先生の便利モジュール, Test::UsedModulesの紹介をしました.
めちゃくちゃ便利なモジュールなのですが, まだまだ誤検出? っぽいのがあるので, 積極的に踏んで報告していきたいと思います.

機会があれば, またCompiler::Lexerを使った高速化にチャレンジしてみたいです...