2012-09-05 13 views
16

Para Python, hay un script llamado importchecker que le dice si tiene declaraciones import innecesarias.¿Hay alguna herramienta para verificar las secuencias de comandos de Perl para uso innecesario?

¿Existe una utilidad similar para las declaraciones Perl use (y require)?

+0

perlcritic puede tener esa funcionalidad. – ikegami

+1

Tenga en cuenta que ninguna solución sería 100% precisa. 'use Module;' podría ser un falso negativo. 'use strict qw (refs);' podría ser un falso positivo. 'use Module qw (: ALL);' podría ser un falso negativo y un falso positivo. – ikegami

+0

Pregunta relacionada: http://www.perlmonks.org/?node_id=780433 – toolic

Respuesta

5

Eche un vistazo a Devel::TraceUse podría darle un pedazo de lo que está buscando.

+0

Eso parece mostrarme lo que se está cargando. Quiero saber qué se está cargando pero no se usa. –

+0

¿Desea análisis de código estático o análisis de tiempo de ejecución? –

+0

Análisis de código estático. –

3

Aquí está un script I wrote para intentar esto. Es muy simple y no automatizará nada para usted, pero le dará algo para empezar.

#!/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"; 
     } 
    } 
} 
+1

Aparece un error de compilación cuando trato de ejecutar este código en perl v5.12.2: 'Tipo de arg 1 para empujar debe ser una matriz (no elemento hash) en la línea no utilizada.pl, cerca de" -> literal; "' – toolic

+1

Esto podría ser un buen punto de partida para extender https://metacpan.org/release/Perl-Critic-StricterSubs – toolic

+0

En realidad debería estar requiriendo 5.14 para el array de empuje. – stu42j

Cuestiones relacionadas