Beefy Boxes and Bandwidth Generously Provided by pair Networks Joe
Syntactic Confectionery Delight
 
PerlMonks  

perlcritic & test files

by Bor (Sexton)
on Aug 02, 2011 at 12:36 UTC ( #918037=perlquestion: print w/ replies, xml ) Need Help??
Bor has asked for the wisdom of the Perl Monks concerning the following question:

Hello Monks,
I have a small question (what I cant find answer)
I use perlcritic
And for my test files perlcritic give me error:
Code not contained in explicit package. Violates encapsulation (Seve +rity: 4)
my test file usually start with
use lib qw( lib ); use strict; use warnings; use Test::More tests => 1;
How I can prevent this error?
Or maybe disable check?

PS.
I try

## no critic (Modules::RequireExplicitPackage)
at end of first line, but it don't help - error appear for next line

Comment on perlcritic & test files
Select or Download Code
Re: perlcritic & test files
by toolic (Chancellor) on Aug 02, 2011 at 12:59 UTC
    UPDATE:
    I try ## no critic (Modules::RequireExplicitPackage) at end of first line, but it don't help - error appear for next line
    When I add ## no critic (Modules::RequireExplicitPackage) before the first line, the Code not contained in explicit package.  Violates encapsulation message disappears for me:
    ## no critic (Modules::RequireExplicitPackage) use lib qw( lib ); use strict; use warnings; use Test::More tests => 1;

    This was my original response...


    According to the POD for Perl::Critic::Policy::Modules::RequireExplicitPackage, there are no hooks for disabling this check. However, it does say:

    so this Policy doesn't apply to files that begin with a perl shebang.
    If you add a shebang line to your test file, the check is suppressed:
    #!/usr/bin/env perl
    If you don't want to do that, then you could just post-process the output of perlcritic and filter out these messages.

    You can also request that this feature be added to the module at https://rt.cpan.org/Public/Dist/Display.html?Name=Perl-Critic. Better yet, figure out how to modify the module yourself and submit a patch (that increases the chances of having the feature added).

      Thank you
      This is what I want
      Somehow I forgot this trick (for this policy it can be use)
Re: perlcritic & test files
by JavaFan (Canon) on Aug 02, 2011 at 16:20 UTC
    How I can prevent this error?
    That's the wrong approach.

    You don't have an error. If there's an error, it's perlcritic complaining about something that's obviously not needed.

    Simple solution: don't run perlcritic on your test files. ;-).

      I'm not contributing anything to the OP, but this made me wonder about perl critic. So I installed and and started to play. Everything I've written, so far, passes it(at least from the documentations example) so I deliberately coded something that does not pass strictures:
      #!/usr/bin/perl use strict; use warnings; $thing = "bleh"; print "hello $thing $bleh\n";
      Here's critic:
      #!/usr/bin/perl use strict; use warnings; use Perl::Critic; my $file = shift; my $critic = Perl::Critic->new(); my @violations = $critic->critique($file); print "@violations\n";
      And here's my result:
      $ perl critic ;perl thing Global symbol "$thing" requires explicit package name at thing line 6. Global symbol "$thing" requires explicit package name at thing line 8. Global symbol "$bleh" requires explicit package name at thing line 8. Execution of thing aborted due to compilation errors.
      What's the purpose of this 'critic' module anyhow?
        Your small code sample has no violations using the default settings on Perl::Critic. However, you can turn up the severity, and start to get complaints. I am more familiar with the perlcritic command line tool:
        $ perlcritic -1 critic Code is not tidy at line 1, column 1. See page 33 of PBP. (Severity: + 1) Use Emacs file variables to declare coding style at line 1, column 1. + Emacs can read per-file settings. (Severity: 2) RCS keywords $Id$ not found at line 1, column 1. See page 441 of PBP. + (Severity: 2) RCS keywords $Revision$, $HeadURL$, $Date$ not found at line 1, column + 1. See page 441 of PBP. (Severity: 2) RCS keywords $Revision$, $Source$, $Date$ not found at line 1, column +1. See page 441 of PBP. (Severity: 2) Missing Perl version at line 1, column 1. Add "use 5.006" or similar. + (Severity: 1) No package-scoped "$VERSION" variable found at line 1, column 1. See +page 404 of PBP. (Severity: 2) Return value of flagged function ignored - print at line 11, column 1. + See pages 208,278 of PBP. (Severity: 1)
        Your results may vary depending on the version of Perl::Critic (I also have additional policies loaded on my system).

        UPDATE: Why didn't you pass a filename on the command line to your critic program? $file has not been assigned a value.

        Also, to set the severity in your critic program:

        my $critic = Perl::Critic->new(-severity=>1);

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://918037]
Approved by Corion
Front-paged by Corion
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others about the Monastery: (8)
As of 2014-04-19 03:43 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    April first is:







    Results (477 votes), past polls