Voici un script I wrote pour tenter cela. C'est très simpliste et n'automatisera rien pour vous, mais ça vous donnera quelque chose pour commencer.
#!/usr/bin/perl
use strict;
use v5.14;
use PPI::Document;
use PPI::Dumper;
use PPI::Find;
use Data::Dumper;
my %import;
my $doc = PPI::Document->new($ARGV[0]);
my $use = $doc->find(sub { $_[1]->isa('PPI::Statement::Include') });
foreach my $u (@$use) {
my $node = $u->find_first('PPI::Token::QuoteLike::Words');
next unless $node;
$import{$u->module} //= [];
push $import{$u->module}, $node->literal;
}
my $words = $doc->find(sub { $_[1]->isa('PPI::Token::Word') });
my @words = map { $_->content } @$words;
my %words;
@words{ @words } = 1;
foreach my $u (keys %import) {
say $u;
foreach my $w (@{$import{$u}}) {
if (exists $words{$w}) {
say "\t- Found $w";
}
else {
say "\t- Can't find $w";
}
}
}
perlcritic pourrait avoir cette fonctionnalité. – ikegami
Notez qu'aucune solution ne serait précise à 100%. 'use Module;' pourrait être un faux négatif. 'use strict qw (refs);' pourrait être un faux positif. 'use Module qw (: ALL);' pourrait être un faux négatif et un faux positif. – ikegami
Question connexe: http://www.perlmonks.org/?node_id=780433 – toolic