Login
RT #64437: InputOutput::RequireBriefOpen false-positive
authorTom Wyant <harryfmudd@comcast.net>
Fri, 25 Feb 2011 21:58:41 +0000 (21:58 +0000)
committerTom Wyant <harryfmudd@comcast.net>
Fri, 25 Feb 2011 21:58:41 +0000 (21:58 +0000)
commit494325b2c21901ced13f534038c90d99da2657da
tree48dae477eb57884a08bfce578477570668e65cd7
parent8b36985b07159628c0cf8c2884adfea4d69c0783
RT #64437: InputOutput::RequireBriefOpen false-positive

The problem was that the policy assumed the close() was in the same
lexical scope as the open() under analysis. This is not necessarily true
unless the open() is of the form 'open my $fh, ...'.

The fix applied was, if we did _not_ have 'open my $fh, ...', to select
as the scope for analysis the most-local scope that ends outside the
allowed line range. This may not technically be the right scope for the
file handle, but if the close() falls outside this scope, we know we
have a violation.

The main change involved jiggering _get_scope() to be sensitive to
which kind of file handle the open() used.
Changes
lib/Perl/Critic/Policy/InputOutput/RequireBriefOpen.pm
t/InputOutput/RequireBriefOpen.run