File Coverage

blib/lib/App/PerlNitpick/Rule/MoreOrLessSpaces.pm
Criterion Covered Total %
statement 36 37 97.3
branch 20 30 66.6
condition 7 9 77.7
subroutine 5 5 100.0
pod 0 1 0.0
total 68 82 82.9


line stmt bran cond sub pod time code
1             package App::PerlNitpick::Rule::MoreOrLessSpaces;
2 1     1   276535 use Moose;
  1         380180  
  1         8  
3 1     1   6331 use PPI::Document;
  1         3  
  1         40  
4 1     1   7 use PPI::Token::Whitespace;
  1         2  
  1         26  
5              
6 1     1   5 no Moose;
  1         2  
  1         4  
7              
8             sub rewrite {
9 3     3 0 13798 my ($self, $document) = @_;
10              
11 3 50       5 for my $el (@{ $document->find('PPI::Token::Whitespace') ||[]}) {
  3         13  
12 13 100       1612 next if $el->parent->isa('PPI::Statement');
13 10 100       48 next unless $el->content =~ m/\A +\n( *)/;
14 1         13 $el->set_content("\n$1");
15             }
16              
17 3 50       13 for my $el (@{ $document->find('PPI::Token::Whitespace') ||[]}) {
  3         7  
18 13 100       1620 next if $el->parent->isa('PPI::Statement');
19              
20 10 100       52 my $prev1 = $el->previous_sibling or next;
21 8 50       133 my $prev2 = $prev1->previous_sibling or next;
22 8 100 66     135 next unless $prev1->isa('PPI::Token::Whitespace') && $prev1->content eq "\n" && $prev2->isa('PPI::Token::Whitespace') && $prev2->content eq "\n";
      100        
      66        
23 2 50       22 if ($el->content eq "\n") {
    0          
24 2         13 $el->delete;
25             } elsif ($el->content =~ m/\A\n( +)\z/) {
26 0         0 $el->set_content("$1");
27             }
28             }
29              
30 3 100       10 for my $el0 (@{ $document->find('PPI::Structure::List') ||[]}) {
  3         13  
31 2 50       682 for my $el (@{ $el0->find('PPI::Token::Operator') ||[]}) {
  2         6  
32 4 50       540 next unless $el->content eq ',';
33 4 50       26 my $next_el = $el->next_sibling or next;
34 4 50       86 unless ($next_el->isa('PPI::Token::Whitespace')) {
35             # Insert a new one.
36 4         10 my $wht = PPI::Token::Whitespace->new(' ');
37 4         36 $el->insert_after($wht);
38             }
39             }
40             }
41              
42 3         883 return $document;
43             }
44              
45             1;
46              
47             __END__
48              
49             =head1 MoreOrLessSpaces
50              
51             In this rule, space characters is inserted or removed within one line
52             between punctuation boundaries.
53