2012-09-05 12 views
16

Dla Pythona istnieje skrypt o nazwie importchecker, który mówi, czy masz niepotrzebne instrukcje import.Czy istnieje narzędzie do sprawdzania skryptu Perla pod kątem niepotrzebnych instrukcji użycia?

Czy istnieje podobne narzędzie do instrukcji Perl use (i require)?

+0

perlcritic może mieć tę funkcję. – ikegami

+1

Należy pamiętać, że żadne rozwiązanie nie byłoby w 100% dokładne. 'use Module;' może być fałszywie ujemnym. 'use strict qw (refs); może być fałszywie dodatnim. 'use Module qw (: ALL);' może być fałszywie ujemnym i fałszywie dodatnim. – ikegami

+0

Powiązane pytanie: http://www.perlmonks.org/?node_id=780433 – toolic

Odpowiedz

5

Spójrz na Devel::TraceUse może dać ci kawałek tego, czego szukasz.

+0

Pokazuje mi, co jest ładowane. Chcę wiedzieć, co jest ładowane, ale nie jest używane. –

+0

Czy chcesz statycznej analizy kodu lub analizy środowiska wykonawczego? –

+0

Statyczna analiza kodu. –

3

Oto script I wrote, aby spróbować. Jest bardzo uproszczona i nie zautomatyzuje niczego dla ciebie, ale da ci coś na początek.

#!/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

Występuje błąd kompilacji podczas próby uruchomienia tego kodu w perlu v5.12.2: 'Typ argumentu 1 do wypychania musi być tablicą (bez elementu hash) w wierszu unused.pl, w pobliżu" -> literału; "' – toolic

+1

To może być dobrym punktem wyjścia do rozszerzenia https://metacpan.org/release/Perl-Critic-StricterSubs – toolic

+0

Powinno to wymagać 5.14 dla push arrayref. – stu42j

Powiązane problemy