File Coverage

blib/lib/DMOSS/Plugin/CommentLines.pm
Criterion Covered Total %
statement 15 44 34.0
branch 0 12 0.0
condition 0 3 0.0
subroutine 5 11 45.4
pod 6 6 100.0
total 26 76 34.2


line stmt bran cond sub pod time code
1             package DMOSS::Plugin::CommentLines;
2             $DMOSS::Plugin::CommentLines::VERSION = '0.01_2';
3             # ABSTRACT: DMOSS number of comment lines plugin
4 1     1   6 use parent qw/DMOSS::Plugin/;
  1         2  
  1         7  
5 1     1   99 use strict;
  1         2  
  1         30  
6 1     1   6 use warnings;
  1         2  
  1         26  
7              
8 1     1   6114 use File::Comments;
  1         179028  
  1         38  
9 1     1   10 use File::Slurp qw/read_file/;
  1         2  
  1         612  
10              
11             our @types = qw/_SOURCE/;
12              
13 0     0 1   sub name { 'Comment Lines' }
14              
15             sub process {
16 0     0 1   my ($self, $dmoss, $file) = @_;
17 0           my $content = read_file $file->fullpath;
18              
19 0           my $snoop = File::Comments->new;
20 0           my $c = $snoop->comments($file->{fullpath});
21              
22 0           my $res = `wc -l $file->{fullpath}`;
23 0           my $total = 0;
24 0 0         $total = $1 if ($res =~ m/(\d+)/);
25 0           my $comments = 0;
26 0 0         $comments = @$c if $c;
27              
28 0           $dmoss->add_attr('comment_lines', {total=>$total, comments=>$comments});
29             }
30              
31             sub reduce {
32 0     0 1   my ($self, $dmoss, @attrs) = @_;
33              
34 0           my ($total, $comments) = (0, 0);
35 0           foreach my $a (@attrs) {
36 0           $total += $a->value->{total};
37 0           $comments += $a->value->{comments};
38             }
39              
40 0           $dmoss->add_attr('comment_lines', {total=>$total, comments=>$comments});
41             }
42              
43             sub report {
44 0     0 1   my ($self, $dmoss, $attr) = @_;
45 0 0 0       return unless ($attr->value and keys %{$attr->value});
  0            
46 0 0         return unless $attr->value->{total};
47 0           my ($comments, $total) = ($attr->value->{comments}, $attr->value->{total});
48              
49 0 0         my $p = $total ? int($comments/$total*100) : 0;
50 0           return [ $attr->file->path, $comments, $total, "$p%" ];
51             }
52              
53             sub report_headers {
54 0     0 1   my ($self, $dmoss) = @_;
55              
56 0           return [ '', 'Comment Lines', 'Total Lines', '% Comment Lines' ];
57             }
58              
59             sub grade {
60 0     0 1   my ($self, $dmoss, $attr) = @_;
61 0           my ($comments, $total) = ($attr->value->{comments}, $attr->value->{total});
62              
63 0 0         return ($total ? ($comments/$total) : 0);
64             }
65              
66             1;
67              
68             __END__