X-Git-Url: http://vcs.maemo.org/git/?a=blobdiff_plain;f=dev%2Farm%2Flibperl-critic-perl%2Flibperl-critic-perl-1.088%2Flib%2FPerl%2FCritic%2FStatistics.pm;fp=dev%2Farm%2Flibperl-critic-perl%2Flibperl-critic-perl-1.088%2Flib%2FPerl%2FCritic%2FStatistics.pm;h=4754ee2889247aa725a4ee6dc402630b14031d07;hb=f477fa73365d491991707e7ed9217b48d6994551;hp=0000000000000000000000000000000000000000;hpb=da95c414033799c3a62606f299c3c00b5c77ca11;p=dh-make-perl diff --git a/dev/arm/libperl-critic-perl/libperl-critic-perl-1.088/lib/Perl/Critic/Statistics.pm b/dev/arm/libperl-critic-perl/libperl-critic-perl-1.088/lib/Perl/Critic/Statistics.pm new file mode 100644 index 0000000..4754ee2 --- /dev/null +++ b/dev/arm/libperl-critic-perl/libperl-critic-perl-1.088/lib/Perl/Critic/Statistics.pm @@ -0,0 +1,315 @@ +############################################################################## +# $URL: http://perlcritic.tigris.org/svn/perlcritic/trunk/Perl-Critic/lib/Perl/Critic/Statistics.pm $ +# $Date: 2008-07-03 10:19:10 -0500 (Thu, 03 Jul 2008) $ +# $Author: clonezone $ +# $Revision: 2489 $ +############################################################################## + +package Perl::Critic::Statistics; + +use 5.006001; +use strict; +use warnings; + +use English qw(-no_match_vars); + +use Perl::Critic::Utils::McCabe qw{ calculate_mccabe_of_sub }; + +#----------------------------------------------------------------------------- + +our $VERSION = '1.088'; + +#----------------------------------------------------------------------------- + +sub new { + my ( $class ) = @_; + + my $self = bless {}, $class; + + $self->{_modules} = 0; + $self->{_subs} = 0; + $self->{_statements} = 0; + $self->{_lines} = 0; + $self->{_violations_by_policy} = {}; + $self->{_violations_by_severity} = {}; + $self->{_total_violations} = 0; + + return $self; +} + +#----------------------------------------------------------------------------- + +sub accumulate { + my ($self, $doc, $violations) = @_; + + $self->{_modules}++; + + my $subs = $doc->find('PPI::Statement::Sub'); + if ($subs) { + foreach my $sub ( @{$subs} ) { + $self->{_subs}++; + $self->{_subs_total_mccabe} += calculate_mccabe_of_sub( $sub ); + } + } + + my $statements = $doc->find('PPI::Statement'); + $self->{_statements} += $statements ? scalar @{$statements} : 0; + + ## no critic (RequireExtendedFormatting, RequireLineBoundaryMatching) + my @lines = split /$INPUT_RECORD_SEPARATOR/, $doc->serialize(); + ## use critic + $self->{_lines} += scalar @lines; + + foreach my $violation ( @{ $violations } ) { + $self->{_violations_by_severity}->{ $violation->severity() }++; + $self->{_violations_by_policy}->{ $violation->policy() }++; + $self->{_total_violations}++; + } + + return; +} + +#----------------------------------------------------------------------------- + +sub modules { + my ( $self ) = @_; + + return $self->{_modules}; +} + +#----------------------------------------------------------------------------- + +sub subs { + my ( $self ) = @_; + + return $self->{_subs}; +} + +#----------------------------------------------------------------------------- + +sub statements { + my ( $self ) = @_; + + return $self->{_statements}; +} + +#----------------------------------------------------------------------------- + +sub lines { + my ( $self ) = @_; + + return $self->{_lines}; +} + +#----------------------------------------------------------------------------- + +sub _subs_total_mccabe { + my ( $self ) = @_; + + return $self->{_subs_total_mccabe}; +} + +#----------------------------------------------------------------------------- + +sub violations_by_severity { + my ( $self ) = @_; + + return $self->{_violations_by_severity}; +} + +#----------------------------------------------------------------------------- + +sub violations_by_policy { + my ( $self ) = @_; + + return $self->{_violations_by_policy}; +} + +#----------------------------------------------------------------------------- + +sub total_violations { + my ( $self ) = @_; + + return $self->{_total_violations}; +} + +#----------------------------------------------------------------------------- + +sub statements_other_than_subs { + my ( $self ) = @_; + + return $self->statements() - $self->subs(); +} + +#----------------------------------------------------------------------------- + +sub average_sub_mccabe { + my ( $self ) = @_; + + return if $self->subs() == 0; + + return $self->_subs_total_mccabe() / $self->subs(); +} + +#----------------------------------------------------------------------------- + +sub violations_per_file { + my ( $self ) = @_; + + return if $self->modules() == 0; + + return $self->total_violations() / $self->modules(); +} + +#----------------------------------------------------------------------------- + +sub violations_per_statement { + my ( $self ) = @_; + + my $statements = $self->statements_other_than_subs(); + + return if $statements == 0; + + return $self->total_violations() / $statements; +} + +#----------------------------------------------------------------------------- + +sub violations_per_line_of_code { + my ( $self ) = @_; + + return if $self->lines() == 0; + + return $self->total_violations() / $self->lines(); +} + +#----------------------------------------------------------------------------- + +1; + +__END__ + +#----------------------------------------------------------------------------- + +=pod + +=for stopwords McCabe + +=head1 NAME + +Perl::Critic::Statistics - Compile stats on Perl::Critic violations. + + +=head1 DESCRIPTION + +This class accumulates statistics on Perl::Critic violations across one or +more files. NOTE: This class is experimental and subject to change. + + +=head1 METHODS + +=over + +=item C + +Create a new instance of Perl::Critic::Statistics. No arguments are supported +at this time. + + +=item C< accumulate( $doc, \@violations ) > + +Accumulates statistics about the C<$doc> and the C<@violations> that were +found. + + +=item C + +The number of chunks of code (usually files) that have been analyzed. + + +=item C + +The total number of subroutines analyzed by this Critic. + + +=item C + +The total number of statements analyzed by this Critic. + + +=item C + +The total number of lines of code analyzed by this Critic. + + +=item C + +The number of violations of each severity found by this Critic as a +reference to a hash keyed by severity. + + +=item C + +The number of violations of each policy found by this Critic as a +reference to a hash keyed by full policy name. + + +=item C + +The the total number of violations found by this Critic. + + +=item C + +The total number of statements minus the number of subroutines. +Useful because a subroutine is considered a statement by PPI. + + +=item C + +The average McCabe score of all scanned subroutines. + + +=item C + +The total violations divided by the number of modules. + + +=item C + +The total violations divided by the number statements minus +subroutines. + + +=item C + +The total violations divided by the lines of code. + + +=back + + +=head1 AUTHOR + +Elliot Shank C<< >> + + +=head1 COPYRIGHT + +Copyright (c) 2007-2008 Elliot Shank + +This program is free software; you can redistribute it and/or modify +it under the same terms as Perl itself. The full text of this license +can be found in the LICENSE file included with this module. + +=cut + +############################################################################## +# Local Variables: +# mode: cperl +# cperl-indent-level: 4 +# fill-column: 78 +# indent-tabs-mode: nil +# c-indentation-style: bsd +# End: +# ex: set ts=8 sts=4 sw=4 tw=78 ft=perl expandtab shiftround :