File Coverage

File:lib/CheckSpelling/CheckPattern.pm
Coverage:100.0%

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