#!/usr/bin/env perl
our
(
$mydir
,
$myname
);
BEGIN {
my
$location
= (-l $0) ? abs_path($0) : $0;
$location
=~ /(.*?)([^\/]+?)_?\z/s or
die
"?"
;
(
$mydir
,
$myname
) = ($1, $2);
}
use
lib
"$mydir/../meta"
;
sub
usage {
print
"usage:
$myname
Criticizes the functional-perl code base.
Options:
--repl
";
exit
1;
}
our
$verbose
= 0;
our
$opt_repl
;
GetOptions(
"verbose"
=> \
$verbose
,
"help"
=>
sub
{usage},
"repl"
=> \
$opt_repl
,
) or
exit
1;
usage
if
@ARGV
;
{
sub
prefix(
$self
) {
$self
->path .
"\t"
}
_END_;
}
{
sub
string(
$self
) {
$self
->prefix .
$self
->messsage
}
_END_;
}
{
sub
has_critique(
$self
) {
@{
$self
->critiques } > 0
}
sub
string(
$self
) {
my
$p
=
$self
->prefix;
$self
->critiques->
map
(
sub
(
$c
) {
"$p$c"
}
)->strings_join(
""
);
}
_END_;
}
sub
critique(
$path
) {
eval
{
my
$critic
= Perl::Critic->new();
PFLANZE::OK->new(
$path
, purearray
$critic
->critique(
$path
));
} || PFLANZE::ERR->new(
$path
,
"$@"
);
}
our
$critiques
= array_to_stream(modulepathlist)->
map
(\
&critique
);
if
(
$opt_repl
) {
repl;
}
else
{
$critiques
->filter(the_method
"has_critique"
)->for_each(
sub
(
$c
) {
xprintln
$c
->string
}
);
}