#!/usr/bin/env perl
use v5.18;

use App::p5find qw(p5_doc_iterator);

my @paths = @ARGV;
@paths = (".") if !@paths;

my %idx;

my $iter = p5_doc_iterator(@paths);
while( my $doc = $iter->() ) {
    my $file = $doc->filename;

    say "... $file";
    my $o;

    $o = $doc->find(sub { $_[1]->isa("PPI::Statement::Package") }) ||[];
    for my $el (@$o) {
        my $n = $el->namespace;
        $idx{$n}{stated}{frequency}++;
        push @{ $idx{$n}{stated}{WHERE} }, [ $file, $el->line_number ];
    }

    $o = $doc->find(sub { $_[1]->isa("PPI::Statement::Include") }) ||[];
    for my $el (@$o) {
        my $n = $el->module;
        $idx{$n}{used}{frequency}++;
        push @{ $idx{$n}{used}{WHERE} }, [ $file, $el->line_number ];
    }
};

for my $tok (keys %idx) {
    next unless $idx{$tok}{stated}{frequency} && ! $idx{$tok}{used}{frequency};
    for my $where (@{$idx{$tok}{stated}{WHERE}}) {
        say join ":", @$where, $tok;
    }
}
