App-PerlCriticUtils
view release on metacpan or search on metacpan
lib/App/PerlCriticUtils.pm view on Meta::CPAN
require PERLANCAR::Module::List;
my %args = @_;
my $query = $args{query} or return [400, "Please specify query"];
my $ignore_case = $args{ignore_case} // 1;
my $listres = pcplist(detail=>1);
my $grepres = [$listres->[0], $listres->[1], [], $listres->[3]];
for my $row (@{ $listres->[2] }) {
my $str = join(" ", $row->{name}, $row->{abstract});
my $match = 1;
for my $q (@$query) {
if ($ignore_case) {
do { $match = 0; last } unless index(lc($str), lc($q)) >= 0;
} else {
do { $match = 0; last } unless index($str, $q) >= 0;
}
}
next unless $match;
push @{$grepres->[2]}, $row;
}
$grepres;
}
$SPEC{pcppath} = {
v => 1.1,
summary => 'Get path to locally installed Perl::Critic policy module',
args => {
%arg_policies,
},
examples => [
{
argv => ['Variables/ProhibitMatchVars'],
test => 0,
},
],
};
sub pcppath {
require Module::Path::More;
my %args = @_;
my $policies = $args{policies};
my $res = [];
my $found;
for my $policy (@{$policies}) {
my $mpath = Module::Path::More::module_path(
module => "Perl::Critic::Policy::$policy",
);
$found++ if $mpath;
for (ref($mpath) eq 'ARRAY' ? @$mpath : ($mpath)) {
push @$res, @$policies > 1 ? {policy=>$policy, path=>$_} : $_;
}
}
if ($found) {
[200, "OK", $res];
} else {
[404, "No such module"];
}
}
$SPEC{pcpless} = {
v => 1.1,
summary => 'Show Perl::Critic policy module source code with `less`',
args => {
%arg_policy,
},
deps => {
prog => 'less',
},
examples => [
{
argv => ['Variables/ProhibitMatchVars'],
test => 0,
'x.doc.show_result' => 0,
},
],
};
sub pcpless {
require Module::Path::More;
my %args = @_;
my $policy = $args{policy};
my $mpath = Module::Path::More::module_path(
module => "Perl::Critic::Policy::$policy",
find_pmc=>0, find_pod=>0, find_prefix=>0);
if (defined $mpath) {
system "less", $mpath;
[200, "OK"];
} else {
[404, "Can't find policy $policy"];
}
}
$SPEC{pcpcat} = {
v => 1.1,
summary => 'Print Perl::Critic policy module source code',
args => {
%arg_policies,
},
examples => [
{
argv => ['Variables/ProhibitMatchVars'],
test => 0,
'x.doc.show_result' => 0,
},
],
};
sub pcpcat {
require Module::Path::More;
my %args = @_;
my $policies = $args{policies};
return [400, "Please specify at least one policy"] unless @$policies;
my $has_success;
my $has_error;
for my $policy (@$policies) {
my $path = Module::Path::More::module_path(
module=>"Perl::Critic::Policy::$policy", find_pod=>0) or do {
warn "pcpcat: No such policy '$policy'\n";
$has_error++;
next;
};
open my $fh, "<", $path or do {
warn "pcpcat: Can't open '$path': $!\n";
$has_error++;
next;
};
print while <$fh>;
close $fh;
$has_success++;
}
if ($has_error) {
if ($has_success) {
return [207, "Some policies failed"];
} else {
return [500, "All policies failed"];
}
} else {
return [200, "All policies OK"];
}
}
$SPEC{pcpdoc} = {
v => 1.1,
summary => 'Show documentation of Perl::Critic policy module',
args => {
%arg_policy,
},
( run in 2.292 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )