Login
Bug fix for RT #42310. These policies could
authorJeffrey Ryan Thalhammer <jeff@imaginative-software.com>
Tue, 20 Jan 2009 04:59:21 +0000 (04:59 +0000)
committerJeffrey Ryan Thalhammer <jeff@imaginative-software.com>
Tue, 20 Jan 2009 04:59:21 +0000 (04:59 +0000)
be fooled when a "use strict" or "use warnings"
appeared inside a lexical block, and it also
happened to be the first statement-line of the
file.  They can be fooled no longer.  Ha!

Changes
lib/Perl/Critic/Policy/TestingAndDebugging/RequireUseStrict.pm
lib/Perl/Critic/Policy/TestingAndDebugging/RequireUseWarnings.pm
t/TestingAndDebugging/RequireUseStrict.run
t/TestingAndDebugging/RequireUseWarnings.run

diff --git a/Changes b/Changes
index a14cbcb..a7ea98c 100644 (file)
--- a/Changes
+++ b/Changes
@@ -3,6 +3,8 @@
     Bug Fixes:
     * ValuesAndExpressions::RequireInterpolationOfMetachars allows for escaped
       backslashes.  Fixed by Tom Wyant, RT #38530.
+    * RequireUseStrict and RequireUseWarnings are no longer fooled 
+      by a block-scoped pragma. RT #42310
 
 [1.095_001] Released on 2009-01-18
 
index 6f467f2..923a273 100644 (file)
@@ -82,6 +82,10 @@ sub _generate_is_use_strict {
         return 0 if !$elem->isa('PPI::Statement::Include');
         return 0 if $elem->type() ne 'use';
 
+        # We only want file-scoped pragmas
+        my $parent = $elem->parent();
+        return 0 if !$parent->isa('PPI::Document');
+
         if ( my $pragma = $elem->pragma() ) {
             return 1 if $self->{_equivalent_modules}{$pragma};
         }
index 53ca7e8..096b4f9 100644 (file)
@@ -90,6 +90,10 @@ sub _generate_is_use_warnings {
         return 0 if !$elem->isa('PPI::Statement::Include');
         return 0 if $elem->type() ne 'use';
 
+        # We only want file-scoped pragmas
+        my $parent = $elem->parent();
+        return 0 if !$parent->isa('PPI::Document');
+
         if ( my $pragma = $elem->pragma() ) {
             return 1 if $self->{_equivalent_modules}{$pragma};
         }
index d976b26..1500303 100644 (file)
@@ -163,6 +163,20 @@ use Foo;
 $foo = $bar;
 
 #-----------------------------------------------------------------------------
+## name "use strict" in lexical context (BEGIN block) RT #42310
+## failures 1
+## cut
+
+BEGIN{ use strict }  # notice this is first statement in file
+$this_is_not_strict
+
+#-----------------------------------------------------------------------------
+## name "use strict" in lexical context (subroutine) RT #42310
+## failures 1
+## cut
+
+sub foo { use strict }  # notice this is first statement in file
+$this_is_not_strict
 
 ##############################################################################
 #      $URL$
index 5804f2a..618d82c 100644 (file)
@@ -198,6 +198,25 @@ $foo = $bar;
 
 #-----------------------------------------------------------------------------
 
+## name "use warnings" in lexical context (BEGIN block) RT #42310
+## failures 1
+## cut
+
+BEGIN { use warnings }  # notice this is first statement in file
+$this_is_not_covered_by_warnings;
+
+#-----------------------------------------------------------------------------
+
+## name "use warnings" in lexical context (subroutine) RT #42310
+## failures 1
+## cut
+
+sub foo { use warnings }  # notice this is first statement in file
+$this_is_not_covered_by_warnings;
+
+
+#-----------------------------------------------------------------------------
+
 ##############################################################################
 #      $URL$
 #     $Date$