Acme-ReturnValue
view release on metacpan or search on metacpan
lib/Acme/ReturnValue.pm view on Meta::CPAN
package Acme::ReturnValue;
# ABSTRACT: report interesting return values
our $VERSION = '1.004'; # VERSION
use 5.010;
use strict;
use warnings;
use PPI;
use File::Find;
use Parse::CPAN::Packages;
use Path::Class qw();
use File::Temp qw(tempdir);
use File::Path;
use File::Copy;
use Archive::Any;
use Data::Dumper;
use JSON;
use Encode;
use Moose;
use List::Util qw(any);
with qw(MooseX::Getopt);
use MooseX::Types::Path::Class;
has 'interesting' => (is=>'rw',isa=>'ArrayRef',default=>sub {[]});
has 'bad' => (is=>'rw',isa=>'ArrayRef',default=>sub {[]});
has 'failed' => (is=>'rw',isa=>'ArrayRef',default=>sub {[]});
has 'quiet' => (is=>'ro',isa=>'Bool',default=>0);
has 'inc' => (is=>'ro',isa=>'Bool',default=>0);
has 'dir' => (is=>'ro',isa=>'Path::Class::Dir',coerce=>1);
has 'file' => (is=>'ro',isa=>'Path::Class::File',coerce=>1);
has 'cpan' => (is=>'ro',isa=>'Path::Class::Dir',coerce=>1);
has 'dump_to' => (is=>'ro',isa=>'Path::Class::Dir',coerce=>1,default=>'returnvalues');
has 'json_encoder' => (is=>'ro',lazy_build=>1);
sub _build_json_encoder {
return JSON->new->pretty;
}
sub run {
my $self = shift;
if ($self->inc) {
$self->in_INC;
}
elsif ($self->dir) {
$self->in_dir($self->dir);
}
elsif ($self->file) {
$self->in_file($self->file);
}
elsif ($self->cpan) {
$self->in_CPAN($self->cpan,$self->dump_to);
exit;
}
else {
$self->in_dir('.');
}
my $interesting=$self->interesting;
if (@$interesting > 0) {
foreach my $cool (@$interesting) {
say $cool->{package} .': '.$cool->{value};
}
}
else {
say "boring!";
}
}
sub waste_some_cycles {
my ($self, $filename) = @_;
my $doc = PPI::Document->new($filename);
eval { # I don't care if that fails...
$doc->prune('PPI::Token::Comment');
$doc->prune('PPI::Token::Pod');
};
my @packages=$doc->find('PPI::Statement::Package');
my $this_package;
foreach my $node ($packages[0][0]->children) {
if ($node->isa('PPI::Token::Word')) {
$this_package = $node->content;
}
}
my @significant = grep { _is_code($_) } $doc->schildren();
my $match = $significant[-1];
my $rv=$match->content;
$rv=~s/\s*;$//;
$rv=~s/^return //gi;
( run in 1.128 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )