File Coverage

lib/Perl/PrereqScanner/NotQuiteLite/Parser/FeatureCompatClass.pm
Criterion Covered Total %
statement 33 43 76.7
branch 8 14 57.1
condition 12 23 52.1
subroutine 6 7 85.7
pod 0 4 0.0
total 59 91 64.8


line stmt bran cond sub pod time code
1             package Perl::PrereqScanner::NotQuiteLite::Parser::FeatureCompatClass;
2              
3 94     94   1378 use strict;
  94         169  
  94         2840  
4 94     94   365 use warnings;
  94         178  
  94         3664  
5 94     94   394 use Perl::PrereqScanner::NotQuiteLite::Util;
  94         144  
  94         58389  
6              
7             sub register { return {
8 93     93 0 477 use => {
9             'Feature::Compat::Class' => 'parse_feature_compat_class_args',
10             },
11             }}
12              
13             sub parse_feature_compat_class_args {
14 10     10 0 20 my ($class, $c, $used_module, $raw_tokens) = @_;
15              
16 10         36 $c->register_sub_parser(
17             'class',
18             [$class, 'parse_class_args', $used_module],
19             );
20             # not implemented yet
21             # $c->register_sub_parser(
22             # 'role',
23             # [$class, 'parse_role_args', $used_module],
24             # );
25              
26 10         32 $c->register_keyword_parser(
27             'class',
28             [$class, 'parse_class_args', $used_module],
29             );
30             # not implemented yet
31             # $c->register_keyword_parser(
32             # 'role',
33             # [$class, 'parse_role_args', $used_module],
34             # );
35              
36             # role is not implemented yet
37 10         23 $c->register_sub_keywords(qw/
38             class method
39             /);
40              
41 10         41 $c->prototype_re(qr{\G(\((?:[^\\\(\)]*(?:\\.[^\\\(\)]*)*)\))});
42             }
43              
44             sub parse_class_args {
45 10     10 0 18 my ($class, $c, $used_module, $raw_tokens) = @_;
46              
47 10         37 my $tokens = convert_string_tokens($raw_tokens);
48 10         14 shift @$tokens; # discard class
49              
50 10         14 my $isa = my $does = 0;
51 10         19 while(my $token = shift @$tokens) {
52 22         277 my ($name, $version) = ('', 0);
53 22 100 33     83 if (ref $token && $token->[1] && $token->[1] eq 'WORD') {
      66        
54 10 50       21 if (is_module_name($token->[0])) {
55 10         14 $name = $token->[0];
56 10 100 100     27 if (@$tokens && is_version($tokens->[0])) {
57 5         8 $version = shift @$tokens;
58             }
59 10         26 $c->add_package($name => $version);
60             }
61             }
62 22 100 33     98 if (ref $token && $token->[1] && $token->[1] eq 'ATTRIBUTE') {
      66        
63 8         44 while($token->[0] =~ s/:(?:isa|does)\(([^)]+)\)//) {
64 8         31 my ($name, $version) = split /\s+/, $1;
65 8   100     22 $version ||= 0;
66 8 50 33     14 if (is_module_name($name) && is_version($version)) {
67 8         17 $c->add($name => $version);
68             }
69             }
70             }
71             }
72             }
73              
74             sub parse_role_args {
75 0     0 0   my ($class, $c, $used_module, $raw_tokens) = @_;
76              
77 0           my $tokens = convert_string_tokens($raw_tokens);
78 0           shift @$tokens; # discard role
79              
80 0           while(my $token = shift @$tokens) {
81 0           my ($name, $version) = ('', 0);
82 0 0         if (is_module_name($token->[0])) {
83 0           $name = $token->[0];
84 0 0 0       if (@$tokens && is_version($tokens->[0])) {
85 0           $version = shift @$tokens;
86             }
87 0           $c->add_package($name => $version);
88             }
89             }
90             }
91              
92             1;
93              
94             __END__