File Coverage

blib/lib/App/PerlNitpick/Rule/DedupeIncludeStatements.pm
Criterion Covered Total %
statement 19 19 100.0
branch 4 6 66.6
condition 1 3 33.3
subroutine 3 3 100.0
pod 0 1 0.0
total 27 32 84.3


line stmt bran cond sub pod time code
1             use Moose;
2 1     1   286885  
  1         398471  
  1         7  
3             my ($self, $document) = @_;
4              
5 3     3 0 14213 my %used;
6             my @to_delete;
7 3         7 for my $el (@{ $document->find('PPI::Statement::Include') ||[]}) {
8             next unless $el->type && $el->type eq 'use';
9 3 50       6 my $module = $el->module;
  3         17  
10 6 50 33     1643 my $code = "$el";
11 6         220 if ($used{$code}) {
12 6         115 push @to_delete, $el;
13 6 100       121 } else {
14 2         6 $used{$code} = 1;
15             }
16 4         12 }
17              
18             for my $el (@to_delete) {
19             $el->remove;
20 3         9 }
21 2         9  
22             return $document;
23             }
24 3         175  
25             no Moose;
26             1;
27 1     1   6811  
  1         3  
  1         5  
28              
29             =head1 DedupeIncludeStatements
30              
31             In this rule, multiple identical "use" statements of the same module are merged.
32              
33             For example, this code:
34              
35             use File::Temp;
36             use Foobar;
37             use File::Temp;
38              
39             ... is transformed to:
40              
41             use File::Temp;
42             use Foobar;
43              
44             Two statements are consider identical if, and only if, they are literally the same, character-to-character.