Re: Patch lint for grep { /.../ } and grep /.../,
Joshua ben Jore [Wed, 1 Mar 2006 01:14:14 +0000 (19:14 -0600)]
From: "Joshua ben Jore" <twists@gmail.com>
Message-ID: <dc5c751d0602282314o19c54a3av92d1a3addbc895fb@mail.gmail.com>

p4raw-id: //depot/perl@27353

ext/B/B/Lint.pm
ext/B/t/lint.t

index 58015b9..05110bf 100644 (file)
@@ -1,6 +1,6 @@
 package B::Lint;
 
-our $VERSION = '1.04';
+our $VERSION = '1.05';
 
 =head1 NAME
 
@@ -280,7 +280,12 @@ sub B::UNOP::lint {
 sub B::PMOP::lint {
     my $op = shift;
     if ($check{implicit_read}) {
-       if ($op->name eq "match" && !($op->flags & OPf_STACKED)) {
+       if ($op->name eq "match"
+               and not ( $op->flags & OPf_STACKED
+                   or join( " ",
+                       map $_->name,
+                       @{B::parents()} )
+               =~ /^(?:leave )?(?:null )*grep/ ) ) {
            warning('Implicit match on $_');
        }
     }
index d5ee215..01bee1b 100644 (file)
@@ -16,7 +16,7 @@ BEGIN {
     require 'test.pl';
 }
 
-plan tests => 16; # adjust also number of skipped tests !
+plan tests => 18; # adjust also number of skipped tests !
 
 # Runs a separate perl interpreter with the appropriate lint options
 # turned on
@@ -43,6 +43,10 @@ runlint 'implicit-read', '/foo/', <<'RESULT';
 Implicit match on $_ at -e line 1
 RESULT
 
+runlint 'implicit-read', 'grep /foo/, ()', '';
+
+runlint 'implicit-read', 'grep { /foo/ } ()', '';
+
 runlint 'implicit-write', 's/foo/bar/', <<'RESULT';
 Implicit substitution on $_ at -e line 1
 RESULT