| File: | lib/CheckSpelling/CheckPattern.pm |
| Coverage: | 100.0% |
| line | stmt | bran | cond | sub | time | code |
|---|---|---|---|---|---|---|
| 1 | #! -*-perl-*- | |||||
| 2 | ||||||
| 3 | package CheckSpelling::CheckPattern; | |||||
| 4 | ||||||
| 5 | 2 2 2 | 112698 2 442 | use CheckSpelling::Util; | |||
| 6 | ||||||
| 7 | sub process_line { | |||||
| 8 | 16 | 2395 | my ($line) = @_; | |||
| 9 | 16 | 10 | chomp $line; | |||
| 10 | 16 | 15 | return ($line, '') if $line =~ /^#/; | |||
| 11 | 12 | 17 | return ($line, '') unless $line =~ /./; | |||
| 12 | 10 | 13 | my $regex_pattern = qr{^(.*?) in regex; marked by <-- HERE in m/(.*) <-- HERE.*$}; | |||
| 13 | 10 | 3 | my $warning; | |||
| 14 | local $SIG{__WARN__} = sub { | |||||
| 15 | 9 | 26 | $warning = $_[0]; | |||
| 16 | 10 | 24 | }; | |||
| 17 | 10 10 | 6 78 | if (eval {qr/$line/} && ($warning eq '')) { | |||
| 18 | 4 | 3 | our %seen_patterns; | |||
| 19 | 4 | 3 | my $previous_reference = $seen_patterns{$line}; | |||
| 20 | 4 | 4 | if (defined $previous_reference) { | |||
| 21 | 1 | 0 | my $length = length $line; | |||
| 22 | 1 | 4 | return ('$^', "1 ... $length, Warning - Pattern is the same as pattern on `$previous_reference` (duplicate-pattern)\n"); | |||
| 23 | } else { | |||||
| 24 | 3 | 8 | $seen_patterns{$line} = "$ARGV:$."; | |||
| 25 | } | |||||
| 26 | 3 | 10 | return ($line, ''); | |||
| 27 | } | |||||
| 28 | 6 | 8 | $warning = $@ unless $warning; | |||
| 29 | 6 | 17 | $warning =~ s/(.*?)\n.*/$1/m; | |||
| 30 | 6 | 2 | my $err = $warning; | |||
| 31 | 6 | 4 | chomp $err; | |||
| 32 | 6 | 25 | $err =~ s{$regex_pattern}{$2}; | |||
| 33 | 6 | 5 | my $code = $1; | |||
| 34 | 6 | 7 | my $start = $+[2] - $-[2]; | |||
| 35 | 6 | 5 | my $end = $start + 1; | |||
| 36 | 6 | 13 | my $wrapped = CheckSpelling::Util::wrap_in_backticks($err); | |||
| 37 | 6 | 9 | if ($code =~ /(^Unmatched )(.)$/) { | |||
| 38 | 3 | 3 | $code = $1 . CheckSpelling::Util::wrap_in_backticks($2); | |||
| 39 | } | |||||
| 40 | 6 | 21 | return ('$^', "$start ... $end, Warning - $code: $wrapped (bad-regex)\n"); | |||
| 41 | } | |||||
| 42 | ||||||
| 43 | sub reset_seen { | |||||
| 44 | 8 | 5 | our %seen_patterns; | |||
| 45 | 8 | 7 | %seen_patters = (); | |||
| 46 | } | |||||
| 47 | ||||||
| 48 | 1; | |||||