X-Git-Url: http://git.maemo.org/git/?p=dh-make-perl;a=blobdiff_plain;f=dev%2Fi386%2Flibperl-critic-perl%2Flibperl-critic-perl-1.088%2Flib%2FPerl%2FCritic%2FPolicy%2FSubroutines%2FProhibitExcessComplexity.pm;fp=dev%2Fi386%2Flibperl-critic-perl%2Flibperl-critic-perl-1.088%2Flib%2FPerl%2FCritic%2FPolicy%2FSubroutines%2FProhibitExcessComplexity.pm;h=24b387ece37c0e8fcc70ddda1608ff69ee2b6f34;hp=0000000000000000000000000000000000000000;hb=da95c414033799c3a62606f299c3c00b5c77ca11;hpb=2d38e14bacbb15b98e539843a40b3c52a225f493 diff --git a/dev/i386/libperl-critic-perl/libperl-critic-perl-1.088/lib/Perl/Critic/Policy/Subroutines/ProhibitExcessComplexity.pm b/dev/i386/libperl-critic-perl/libperl-critic-perl-1.088/lib/Perl/Critic/Policy/Subroutines/ProhibitExcessComplexity.pm new file mode 100644 index 0000000..24b387e --- /dev/null +++ b/dev/i386/libperl-critic-perl/libperl-critic-perl-1.088/lib/Perl/Critic/Policy/Subroutines/ProhibitExcessComplexity.pm @@ -0,0 +1,143 @@ +############################################################################## +# $URL: http://perlcritic.tigris.org/svn/perlcritic/trunk/Perl-Critic/lib/Perl/Critic/Policy/Subroutines/ProhibitExcessComplexity.pm $ +# $Date: 2008-07-03 10:19:10 -0500 (Thu, 03 Jul 2008) $ +# $Author: clonezone $ +# $Revision: 2489 $ +############################################################################## + +package Perl::Critic::Policy::Subroutines::ProhibitExcessComplexity; + +use 5.006001; +use strict; +use warnings; +use Readonly; + +use Perl::Critic::Utils qw{ :severities :data_conversion :classification }; +use Perl::Critic::Utils::McCabe qw{ calculate_mccabe_of_sub }; + +use base 'Perl::Critic::Policy'; + +our $VERSION = '1.088'; + +#----------------------------------------------------------------------------- + +Readonly::Scalar my $EXPL => q{Consider refactoring}; + +#----------------------------------------------------------------------------- + +sub supported_parameters { + return ( + { + name => 'max_mccabe', + description => 'The maximum complexity score allowed.', + default_string => '20', + behavior => 'integer', + integer_minimum => 1, + }, + ); +} + +sub default_severity { return $SEVERITY_MEDIUM } +sub default_themes { return qw(core complexity maintenance) } +sub applies_to { return 'PPI::Statement::Sub' } + +#----------------------------------------------------------------------------- + +sub violates { + my ( $self, $elem, undef ) = @_; + + my $score = calculate_mccabe_of_sub( $elem ); + + # Is it too complex? + return if $score <= $self->{_max_mccabe}; + + my $desc = qq{Subroutine with high complexity score ($score)}; + return $self->violation( $desc, $EXPL, $elem ); +} + + +1; + +__END__ + +#----------------------------------------------------------------------------- + +=pod + +=for stopwords McCabe + +=head1 NAME + +Perl::Critic::Policy::Subroutines::ProhibitExcessComplexity - Minimize complexity by factoring code into smaller subroutines. + +=head1 AFFILIATION + +This Policy is part of the core L distribution. + + +=head1 DESCRIPTION + +All else being equal, complicated code is more error-prone and more +expensive to maintain than simpler code. The first step towards +managing complexity is to establish formal complexity metrics. One +such metric is the McCabe score, which describes the number of +possible paths through a subroutine. This Policy approximates the +McCabe score by summing the number of conditional statements and +operators within a subroutine. Research has shown that a McCabe score +higher than 20 is a sign of high-risk, potentially untestable code. +See L +for some discussion about the McCabe number and other complexity +metrics. + +The usual prescription for reducing complexity is to refactor code +into smaller subroutines. Mark Dominus book "Higher Order Perl" also +describes callbacks, recursion, memoization, iterators, and other +techniques that help create simple and extensible Perl code. + +=head1 CONFIGURATION + +The maximum acceptable McCabe can be set with the C +configuration item. Any subroutine with a McCabe score higher than +this number will generate a policy violation. The default is 20. An +example section for a F<.perlcriticrc>: + + [Subroutines::ProhibitExcessComplexity] + max_mccabe = 30 + +=head1 NOTES + + + "Everything should be made as simple as possible, but no simpler." + + -- Albert Einstein + + +Complexity is subjective, but formal complexity metrics are still +incredibly valuable. Every problem has an inherent level of +complexity, so it is not necessarily optimal to minimize the McCabe +number. So don't get offended if your code triggers this Policy. +Just consider if there B be a simpler way to get the job done. + + +=head1 AUTHOR + +Jeffrey Ryan Thalhammer + +=head1 COPYRIGHT + +Copyright (c) 2005-2008 Jeffrey Ryan Thalhammer. All rights reserved. + +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 :