1 ##############################################################################
2 # $URL: http://perlcritic.tigris.org/svn/perlcritic/trunk/Perl-Critic/lib/Perl/Critic/Policy/Modules/ProhibitMultiplePackages.pm $
3 # $Date: 2008-07-03 10:19:10 -0500 (Thu, 03 Jul 2008) $
6 ##############################################################################
8 package Perl::Critic::Policy::Modules::ProhibitMultiplePackages;
15 use Perl::Critic::Utils qw{ :severities };
16 use base 'Perl::Critic::Policy';
18 our $VERSION = '1.088';
20 #-----------------------------------------------------------------------------
22 Readonly::Scalar my $DESC => q{Multiple "package" declarations};
23 Readonly::Scalar my $EXPL => q{Limit to one per file};
25 #-----------------------------------------------------------------------------
27 sub supported_parameters { return () }
28 sub default_severity { return $SEVERITY_HIGH }
29 sub default_themes { return qw( core bugs ) }
30 sub applies_to { return 'PPI::Document' }
32 #-----------------------------------------------------------------------------
35 my ( $self, $elem, $doc ) = @_;
36 my $nodes_ref = $doc->find('PPI::Statement::Package');
37 return if !$nodes_ref;
38 my @matches = @{$nodes_ref} > 1 ? @{$nodes_ref}[ 1 .. $#{$nodes_ref} ] :();
40 return map {$self->violation($DESC, $EXPL, $_)} @matches;
47 #-----------------------------------------------------------------------------
53 Perl::Critic::Policy::Modules::ProhibitMultiplePackages - Put packages (especially subclasses) in separate files.
57 This Policy is part of the core L<Perl::Critic> distribution.
62 Conway doesn't specifically mention this, but I find it annoying when
63 there are multiple packages in the same file. When searching for
64 methods or keywords in your editor, it makes it hard to find the right
65 chunk of code, especially if each package is a subclass of the same
71 This Policy is not configurable except for the standard options.
76 Jeffrey Ryan Thalhammer <thaljef@cpan.org>
80 Copyright (c) 2005-2008 Jeffrey Ryan Thalhammer. All rights reserved.
82 This program is free software; you can redistribute it and/or modify
83 it under the same terms as Perl itself. The full text of this license
84 can be found in the LICENSE file included with this module.
90 # cperl-indent-level: 4
92 # indent-tabs-mode: nil
93 # c-indentation-style: bsd
95 # ex: set ts=8 sts=4 sw=4 tw=78 ft=perl expandtab shiftround :