Test-UsedModules
view release on metacpan or search on metacpan
lib/Test/UsedModules/PPIDocument.pm view on Meta::CPAN
my @ppi_used_modules = $ppi_document =~ /
PPI::Statement::Include \n
(
\s*? PPI::Token::Word \s* \'(?:use|require)\' \s*? \n
\s*? PPI::Token::Word \s* .*? \n
(?:.*? \n)?
)
\s*? PPI::Token::Structure \s* \';\' \s*? \n
/gxm;
my @ppi_loaded_modules = $ppi_document =~ /
PPI::Statement \n
(
\s*? PPI::Token::Word \s* \'load\' \s*? \n
\s*? PPI::Token::Word \s* .*? \n
(?:.*? \n)?
)
\s*? PPI::Token::Structure \s* \';\' \s*? \n
/gxm;
push @ppi_used_modules, @ppi_loaded_modules;
return @ppi_used_modules;
}
sub _generate_with_include {
my ($file, $extra_remove_token) = shift;
my $document = _remove_unnecessary_tokens(PPI::Document->new($file), $extra_remove_token);
return PPI::Dumper->new($document)->string();
}
sub _remove_include_sections {
my ($ppi_document) = @_;
$ppi_document =~ s/
PPI::Statement::Include \n
\s*? PPI::Token::Word \s* \'(?:use|require)\' \s*? \n
\s*? PPI::Token::Word \s* .*? \n
(?:.*? \n)?
\s*? PPI::Token::Structure \s* \';\' \s*? \n
//gxm;
my $load_removed = $ppi_document =~ s/
PPI::Statement \n
\s*? PPI::Token::Word \s* \'load\' \s*? \n
\s*? PPI::Token::Word \s* .*? \n
(?:.*? \n)?
\s*? PPI::Token::Structure \s* \';\' \s*? \n
//gxm;
return ($ppi_document, $load_removed);
}
sub _remove_unnecessary_tokens {
my ( $document, $optional_token ) = @_;
my @surplus_tokens = (
'Operator',
'Number',
'Comment',
'Pod',
'BOM',
'Data',
'End',
'Prototype',
'Separator',
'Whitespace'
);
if ($optional_token) {
push @surplus_tokens, $optional_token;
}
foreach my $surplus_token (@surplus_tokens) {
$document->prune( 'PPI::Token::' . $surplus_token );
}
return $document;
}
1;
( run in 0.569 second using v1.01-cache-2.11-cpan-d8267643d1d )