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%2FVariables%2FProhibitConditionalDeclarations.pm;fp=dev%2Fi386%2Flibperl-critic-perl%2Flibperl-critic-perl-1.088%2Flib%2FPerl%2FCritic%2FPolicy%2FVariables%2FProhibitConditionalDeclarations.pm;h=8374d448ee0bc7fe6ea9c7edaf1645ba587cf38e;hp=0000000000000000000000000000000000000000;hb=da95c414033799c3a62606f299c3c00b5c77ca11;hpb=2d38e14bacbb15b98e539843a40b3c52a225f493 diff --git a/dev/i386/libperl-critic-perl/libperl-critic-perl-1.088/lib/Perl/Critic/Policy/Variables/ProhibitConditionalDeclarations.pm b/dev/i386/libperl-critic-perl/libperl-critic-perl-1.088/lib/Perl/Critic/Policy/Variables/ProhibitConditionalDeclarations.pm new file mode 100644 index 0000000..8374d44 --- /dev/null +++ b/dev/i386/libperl-critic-perl/libperl-critic-perl-1.088/lib/Perl/Critic/Policy/Variables/ProhibitConditionalDeclarations.pm @@ -0,0 +1,114 @@ +############################################################################## +# $URL: http://perlcritic.tigris.org/svn/perlcritic/trunk/Perl-Critic/lib/Perl/Critic/Policy/Variables/ProhibitConditionalDeclarations.pm $ +# $Date: 2008-07-03 10:19:10 -0500 (Thu, 03 Jul 2008) $ +# $Author: clonezone $ +# $Revision: 2489 $ +############################################################################## + +package Perl::Critic::Policy::Variables::ProhibitConditionalDeclarations; + +use 5.006001; +use strict; +use warnings; +use Readonly; + +use Perl::Critic::Utils qw{ :severities :classification :data_conversion }; +use base 'Perl::Critic::Policy'; + +our $VERSION = '1.088'; + +#----------------------------------------------------------------------------- + +Readonly::Scalar my $DESC => q{Variable declared in conditional statement}; +Readonly::Scalar my $EXPL => q{Declare variables outside of the condition}; + +#----------------------------------------------------------------------------- + +sub supported_parameters { return () } +sub default_severity { return $SEVERITY_HIGHEST } +sub default_themes { return qw( core bugs ) } +sub applies_to { return 'PPI::Statement::Variable' } + +#----------------------------------------------------------------------------- + +sub violates { + my ( $self, $elem, undef ) = @_; + return if $elem->type() eq 'local'; + + if ( $elem->find(\&_is_conditional) ) { + return $self->violation( $DESC, $EXPL, $elem ); + } + return; #ok! +} + +my @conditionals = qw( if while foreach for until unless ); +my %conditionals = hashify( @conditionals ); + +sub _is_conditional { + my (undef, $elem) = @_; + + return if !$conditionals{$elem}; + return if ! $elem->isa('PPI::Token::Word'); + return if is_hash_key($elem); + return if is_method_call($elem); + + return 1; +} + +1; + +__END__ + +#----------------------------------------------------------------------------- + +=pod + +=head1 NAME + +Perl::Critic::Policy::Variables::ProhibitConditionalDeclarations - Do not write C< my $foo = $bar if $baz; >. + +=head1 AFFILIATION + +This Policy is part of the core L distribution. + + +=head1 DESCRIPTION + +Declaring a variable with a postfix conditional is really confusing. +If the conditional is false, its not clear if the variable will +be false, undefined, undeclared, or what. It's much more straightforward +to make variable declarations separately. + + my $foo = $baz if $bar; #not ok + my $foo = $baz unless $bar; #not ok + our $foo = $baz for @list; #not ok + local $foo = $baz foreach @list; #not ok + + +=head1 CONFIGURATION + +This Policy is not configurable except for the standard options. + + +=head1 AUTHOR + +Jeffrey R. Thalhammer + +=head1 COPYRIGHT + +Copyright (c) 2006-2008 Chris Dolan. 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 :