Login
Per request from David Golden, allow "local" to be used in conditional statements.
authorJeffrey Ryan Thalhammer <jeff@imaginative-software.com>
Fri, 28 Sep 2007 15:42:13 +0000 (15:42 +0000)
committerJeffrey Ryan Thalhammer <jeff@imaginative-software.com>
Fri, 28 Sep 2007 15:42:13 +0000 (15:42 +0000)
Changes
lib/Perl/Critic/Policy/Variables/ProhibitConditionalDeclarations.pm
t/Variables/ProhibitConditionalDeclarations.run

diff --git a/Changes b/Changes
index 154c460..d992bad 100644 (file)
--- a/Changes
+++ b/Changes
      Other New Policies
      * ControlStructures::ProhibitNegativeExpressionsInUnlessAndUntilConditions
 
+     Policy Changes:
+     * Variables::ProhibitConditionalDeclarations now permits you to local-ize
+       variables in conditional declarations.  This makes sense, since C<local>
+       is actually a variable modifier, rather than a declaration.  Thanks
+       to David Golden for reporting this.
+
      New Features:
      * Allow a "## no critic" statement after a shebang on line 1 of a
        file.  This allows users to block violations that apply to
index c598b77..5bd1485 100644 (file)
@@ -32,6 +32,7 @@ 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 );
index cec9917..d567d1e 100644 (file)
@@ -1,71 +1,61 @@
 ## name With if
-## failures 6
+## failures 4
 ## cut
 
 my $foo = 1 if $bar;
-local $foo = 1 if $bar;
 our $foo = 1 if $bar;
 
 my ($foo, $baz) = @list if $bar;
-local ($foo, $baz) = @list if $bar;
 our ($foo, $baz) = 1 if $bar;
 
 
 #-----------------------------------------------------------------------------
 
 ## name With unless
-## failures 6
+## failures 4
 ## cut
 
 my $foo = 1 unless $bar;
-local $foo = 1 unless $bar;
 our $foo = 1 unless $bar;
 
 my ($foo, $baz) = @list unless $bar;
-local ($foo, $baz) = @list unless $bar;
 our ($foo, $baz) = 1 unless $bar;
 
 
 #-----------------------------------------------------------------------------
 
 ## name With while
-## failures 6
+## failures 4
 ## cut
 
 my $foo = 1 while $bar;
-local $foo = 1 while $bar;
 our $foo = 1 while $bar;
 
 my ($foo, $baz) = @list while $bar;
-local ($foo, $baz) = @list while $bar;
 our ($foo, $baz) = 1 while $bar;
 
 #-----------------------------------------------------------------------------
 
 ## name With for
-## failures 6
+## failures 4
 ## cut
 
 my $foo = 1 for @bar;
-local $foo = 1 for @bar;
 our $foo = 1 for @bar;
 
 my ($foo, $baz) = @list for @bar;
-local ($foo, $baz) = @list for @bar;
 our ($foo, $baz) = 1 for @bar;
 
 #-----------------------------------------------------------------------------
 
 ## name With foreach
-## failures 6
+## failures 4
 ## cut
 
 my $foo = 1 foreach @bar;
-local $foo = 1 foreach @bar;
 our $foo = 1 foreach @bar;
 
 my ($foo, $baz) = @list foreach @bar;
-local ($foo, $baz) = @list foreach @bar;
 our ($foo, $baz) = 1 foreach @bar;
 
 #-----------------------------------------------------------------------------
@@ -86,6 +76,19 @@ my $foo = $obj->if();
 
 #-----------------------------------------------------------------------------
 
+## name local is exempt
+## failures 0
+## cut
+
+local $foo = $bar if $baz;
+local ($foo) = $bar if $baz;
+local $foo = $bar unless $baz;
+local ($foo) = $bar unless $baz;
+local $foo = $bar until $baz;
+local ($foo) = $bar until $baz;
+local ($foo, $bar) = 1 foreach @baz; 
+local ($foo, $bar) = 1 for @baz;
+
 ##############################################################################
 #      $URL$
 #     $Date$