Login
Cleaned up the code in ProhibitMixedBooleanOperators, but I wasn't
authorJeffrey Ryan Thalhammer <jeff@imaginative-software.com>
Wed, 20 Jun 2007 04:15:28 +0000 (04:15 +0000)
committerJeffrey Ryan Thalhammer <jeff@imaginative-software.com>
Wed, 20 Jun 2007 04:15:28 +0000 (04:15 +0000)
able to fix bug #27637.  It is going to take more thought than I
had expected.  So I've marked the test as TODO for now.

lib/Perl/Critic/Policy/ValuesAndExpressions/ProhibitMixedBooleanOperators.pm
t/ValuesAndExpressions/ProhibitMixedBooleanOperators.run

index d908375..673bc2c 100644 (file)
@@ -12,26 +12,29 @@ use warnings;
 use Perl::Critic::Utils qw{ :severities :data_conversion };
 use base 'Perl::Critic::Policy';
 
+
+#-----------------------------------------------------------------------------
+
 our $VERSION = 1.053;
 
 #-----------------------------------------------------------------------------
 
-my @low_booleans  = qw( not or and );
-my %low_booleans  = hashify( @low_booleans );
-
-my @high_booleans = qw( ! || && );
-my %high_booleans = hashify( @high_booleans );
-
-my @exempt_types = qw(
-    PPI::Statement::Block
-    PPI::Statement::Scheduled
-    PPI::Statement::Package
-    PPI::Statement::Include
-    PPI::Statement::Sub
-    PPI::Statement::Variable
-    PPI::Statement::Compound
-    PPI::Statement::Data
-    PPI::Statement::End
+my %low_booleans  = hashify( qw( not or and ) );
+
+my %high_booleans = hashify( qw( ! || && ) );
+
+my %exempt_types = hashify(
+    qw(
+        PPI::Statement::Block
+        PPI::Statement::Scheduled
+        PPI::Statement::Package
+        PPI::Statement::Include
+        PPI::Statement::Sub
+        PPI::Statement::Variable
+        PPI::Statement::Compound
+        PPI::Statement::Data
+        PPI::Statement::End
+    )
 );
 
 #-----------------------------------------------------------------------------
@@ -41,10 +44,10 @@ my $expl = [ 70 ];
 
 #-----------------------------------------------------------------------------
 
-sub supported_parameters { return() }
-sub default_severity { return $SEVERITY_HIGH   }
-sub default_themes    { return qw( core bugs pbp )  }
-sub applies_to       { return 'PPI::Statement' }
+sub supported_parameters { return                     }
+sub default_severity     { return $SEVERITY_HIGH      }
+sub default_themes       { return qw( core bugs pbp ) }
+sub applies_to           { return 'PPI::Statement'    }
 
 #-----------------------------------------------------------------------------
 
@@ -58,10 +61,7 @@ sub violates {
     # better ways to do this, such as scanning for a semi-colon or
     # some other marker.
 
-    for my $type (@exempt_types) {
-        return if $elem->isa($type);
-    }
-
+    return if exists $exempt_types{ ref $elem };
 
     if (    $elem->find_first(\&_low_boolean)
          && $elem->find_first(\&_high_boolean) ) {
@@ -71,6 +71,7 @@ sub violates {
     return;    #ok!
 }
 
+#-----------------------------------------------------------------------------
 
 sub _low_boolean {
     my (undef, $elem) = @_;
@@ -78,6 +79,8 @@ sub _low_boolean {
     return exists $low_booleans{$elem};
 }
 
+#-----------------------------------------------------------------------------
+
 sub _high_boolean {
     my (undef, $elem) = @_;
     $elem->isa('PPI::Token::Operator') || return 0;
index b60cbcc..7597a54 100644 (file)
@@ -1,3 +1,11 @@
+##############################################################################
+#      $URL$
+#     $Date$
+#   $Author$
+# $Revision$
+##############################################################################
+
+
 ## name High-precedence passing
 ## failures 0
 ## cut
@@ -40,21 +48,14 @@ $sub ||= sub {
 #-----------------------------------------------------------------------------
 
 ## name Mixed booleans in same statement, but different expressions
+## TODO Not sure how to separate expressions right now
 ## failures 0
 ## cut
 
 # See http://rt.cpan.org/Ticket/Display.html?id=27637
 ok( ! 1, 'values are URLs' ) or diag 'never happens';
 
-#-----------------------------------------------------------------------------
-
-##############################################################################
-#      $URL$
-#     $Date$
-#   $Author$
-# $Revision$
 ##############################################################################
-
 # Local Variables:
 #   mode: cperl
 #   cperl-indent-level: 4