App-Midgen
view release on metacpan or search on metacpan
lib/App/Midgen/Role/UseOk.pm view on Meta::CPAN
package App::Midgen::Role::UseOk;
use constant {BLANK => q{ }, NONE => q{}, TWO => 2, THREE => 3,};
use Moo::Role;
requires
qw( ppi_document debug verbose format xtest _process_found_modules develop meta2 );
# Load time and dependencies negate execution time
# use namespace::clean -except => 'meta';
our $VERSION = '0.34';
$VERSION = eval $VERSION; ## no critic
use PPI;
use Try::Tiny;
use Data::Printer {caller_info => 1,};
use Tie::Static qw(static);
#use List::MoreUtils qw( lastidx );
#######
# composed method - _xtests_in_single_quote
#######
sub xtests_use_ok {
my $self = shift;
my $phase_relationship = shift || NONE;
my @modules;
my @version_strings;
#PPI::Document
# PPI::Statement::Scheduled
# PPI::Token::Word 'BEGIN'
# PPI::Token::Whitespace ' '
# PPI::Structure::Block { ... }
# PPI::Token::Whitespace '\n'
# PPI::Token::Whitespace '\t'
# PPI::Statement
# PPI::Token::Word 'use_ok'
# PPI::Structure::List ( ... )
# PPI::Token::Whitespace ' '
# PPI::Statement::Expression
# PPI::Token::Quote::Single ''Term::ReadKey''
# PPI::Token::Operator ','
# PPI::Token::Whitespace ' '
# PPI::Token::Quote::Single ''2.30''
my @chunks =
map { [$_->schildren] }
grep { $_->child(0)->literal =~ m{\A(?:BEGIN)\z} }
grep { $_->child(0)->isa('PPI::Token::Word') }
@{$self->ppi_document->find('PPI::Statement::Scheduled') || []};
foreach my $hunk (@chunks) {
# looking for use_ok { 'Term::ReadKey' => '2.30' };
if (grep { $_->isa('PPI::Structure::Block') } @$hunk) {
# hack for List
my @hunkdata = @$hunk;
foreach my $ppi_sb (@hunkdata) {
if ($ppi_sb->isa('PPI::Structure::Block')) {
foreach my $ppi_s (@{$ppi_sb->{children}}) {
if ($ppi_s->isa('PPI::Statement')) {
p $ppi_s if $self->debug;
if ($ppi_s->{children}[0]->content eq 'use_ok') {
my $ppi_sl = $ppi_s->{children}[1];
foreach my $ppi_se (@{$ppi_sl->{children}}) {
if ($ppi_se->isa('PPI::Statement::Expression')) {
foreach my $element (@{$ppi_se->{children}}) {
# some fudge to remember the module name if falied
static \my $previous_module;
if ( $element->isa('PPI::Token::Quote::Single')
( run in 0.541 second using v1.01-cache-2.11-cpan-75ffa21a3d4 )