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 )