]> git.vpit.fr Git - perl/modules/Perl-Critic-Policy-Dynamic-NoIndirect.git/blobdiff - lib/Perl/Critic/Policy/Dynamic/NoIndirect.pm
Force the correct line number and file name when eval'ing the auditted code
[perl/modules/Perl-Critic-Policy-Dynamic-NoIndirect.git] / lib / Perl / Critic / Policy / Dynamic / NoIndirect.pm
index 3233efcfa555745b1e118a5e45401efb3336907f..3769d30fd9c7d084336710312b8b34e0493d4508 100644 (file)
@@ -43,19 +43,20 @@ my $tag_obj = sub {
 sub violates_dynamic {
  my ($self, undef, $doc) = @_;
 
- my $src;
-
+ my ($src, $file);
  if ($doc->isa('PPI::Document::File')) {
-  my $file = $doc->filename;
+  $file = $doc->filename;
   open my $fh, '<', $file
       or do { require Carp; Carp::confess("Can't open $file for reading: $!") };
   $src = do { local $/; <$fh> };
  } else {
-  $src = $doc->serialize;
+  $file = '(eval 0)';
+  $src  = $doc->serialize;
  }
 
+ $file =~ s/(?<!\\)((\\\\)*)"/$1\\"/g;
+
  my @errs;
- my $offset  = 6;
  my $wrapper = <<" WRAPPER";
  {
   return;
@@ -63,6 +64,7 @@ sub violates_dynamic {
   no indirect hook => sub { push \@errs, [ \@_ ] };
   {
    ;
+#line 1 "$file"
    $src
   }
  }
@@ -83,7 +85,6 @@ sub violates_dynamic {
   my %errs_tags;
   for (@errs) {
    my ($obj, $meth, $line) = @$_[0, 1, 3];
-   $line -= $offset;
    my $tag = join "\0", $line, $meth, $tag_obj->($obj);
    push @{$errs_tags{$tag}}, [ $obj, $meth ];
   }