File Coverage

blib/lib/Perl/Lint/Policy/InputOutput/RequireEncodingWithUTF8Layer.pm
Criterion Covered Total %
statement 35 35 100.0
branch 8 8 100.0
condition 24 30 80.0
subroutine 7 7 100.0
pod 0 1 0.0
total 74 81 91.3


line stmt bran cond sub pod time code
1             package Perl::Lint::Policy::InputOutput::RequireEncodingWithUTF8Layer;
2 133     133   69518 use strict;
  133         212  
  133         3139  
3 133     133   436 use warnings;
  133         182  
  133         2514  
4 133     133   752 use Perl::Lint::Constants::Kind;
  133         156  
  133         6527  
5 133     133   857 use Perl::Lint::Constants::Type;
  133         175  
  133         60160  
6 133     133   580 use parent "Perl::Lint::Policy";
  133         165  
  133         612  
7              
8             use constant {
9 133         32335 DESC => 'I/O layer ":utf8" used',
10             EXPL => 'Use ":encoding(UTF-8)" to get strict validation',
11 133     133   9961 };
  133         192  
12              
13             sub evaluate {
14 3     3 0 5 my ($class, $file, $tokens, $src, $args) = @_;
15              
16 3         2 my @violations;
17 3         11 for (my $i = 0; my $token = $tokens->[$i]; $i++) {
18 223         138 my $token_type = $token->{type};
19 223         148 my $token_data = $token->{data};
20              
21 223 100 100     562 if ($token_type == BUILTIN_FUNC && ($token_data eq 'open' || $token_data eq 'binmode')) {
      66        
22 90         37 my @args;
23 90         143 for ($i++; my $token = $tokens->[$i]; $i++) {
24 498         324 my $token_type = $token->{type};
25 498         290 my $token_kind = $token->{kind};
26 498 100 100     3515 if ($token_type == RIGHT_PAREN || $token_kind == KIND_STMT_END || $token_kind == KIND_OP) {
    100 100        
      66        
      66        
      33        
      66        
      100        
27 90         88 last;
28             }
29             elsif (
30             $token_type != COMMA &&
31             $token_type != REG_DOUBLE_QUOTE &&
32             $token_type != REG_QUOTE &&
33             $token_type != REG_DELIM &&
34             $token_type != LEFT_PAREN &&
35             $token_kind != KIND_DECL
36             ) {
37 218         357 push @args, $token->{data};
38             }
39             }
40 90         63 my $second_arg = $args[1];
41 90 100 100     283 if ($second_arg && $second_arg =~ /utf8\Z/) {
42             push @violations, {
43             filename => $file,
44             line => $token->{line},
45 38         157 description => DESC,
46             explanation => EXPL,
47             policy => __PACKAGE__,
48             };
49             }
50             }
51              
52             }
53              
54 3         13 return \@violations;
55             }
56              
57             1;
58