File Coverage

blib/lib/Perl/Critic/Policy/Variables/ProhibitPerl4PackageNames.pm
Criterion Covered Total %
statement 30 30 100.0
branch 6 6 100.0
condition 3 3 100.0
subroutine 11 11 100.0
pod 4 5 80.0
total 54 55 98.1


line stmt bran cond sub pod time code
1             package Perl::Critic::Policy::Variables::ProhibitPerl4PackageNames;
2              
3 40     40   26706 use 5.010001;
  40         198  
4 40     40   307 use strict;
  40         140  
  40         872  
5 40     40   246 use warnings;
  40         111  
  40         1000  
6 40     40   256 use Readonly;
  40         130  
  40         2034  
7              
8 40     40   281 use Perl::Critic::Utils qw{ :characters :severities :classification };
  40         108  
  40         2056  
9 40     40   19679 use parent 'Perl::Critic::Policy';
  40         104  
  40         249  
10              
11             our $VERSION = '1.148';
12              
13             #-----------------------------------------------------------------------------
14              
15             Readonly::Scalar my $EXPL =>
16             q{Use double colon (::) to separate package name components instead of single quotes (')};
17              
18             #-----------------------------------------------------------------------------
19              
20 106     106 0 1769 sub supported_parameters { return () }
21 146     146 1 590 sub default_severity { return $SEVERITY_LOW }
22 74     74 1 444 sub default_themes { return qw(core maintenance certrec ) }
23 47     47 1 176 sub applies_to { return qw( PPI::Token::Word PPI::Token::Symbol ) }
24              
25             #-----------------------------------------------------------------------------
26              
27             sub violates {
28 848     848 1 1580 my ( $self, $elem, undef ) = @_;
29 848         1682 my $content = $elem->content();
30              
31 848 100       3675 if ( (index $content, $QUOTE) < 0 ) {
32 772         1933 return;
33             }
34              
35 76 100       231 if ( $content =~ m< \A [\$@%&*] ' \z >xms ) {
36             # We've found $POSTMATCH.
37 2         6 return;
38             }
39              
40 74 100 100     433 if ( $elem->isa('PPI::Token::Word') && is_hash_key($elem) ) {
41 2         31 return;
42             }
43              
44             return
45 72         517 $self->violation(
46             qq{"$content" uses the obsolete single quote package separator.},
47             $EXPL,
48             $elem
49             );
50             }
51              
52             #-----------------------------------------------------------------------------
53              
54             1;
55              
56             __END__
57              
58             #-----------------------------------------------------------------------------
59              
60             =pod
61              
62             =for stopwords perlmod
63              
64             =head1 NAME
65              
66             Perl::Critic::Policy::Variables::ProhibitPerl4PackageNames - Use double colon (::) to separate package name components instead of single quotes (').
67              
68              
69             =head1 AFFILIATION
70              
71             This Policy is part of the core L<Perl::Critic|Perl::Critic>
72             distribution.
73              
74              
75             =head1 DESCRIPTION
76              
77             Perl 5 kept single quotes (C<'>) as package component separators in
78             order to remain backward compatible with prior C<perl>s, but advocated
79             using double colon (C<::>) instead. In the more than a decade since
80             Perl 5, double colons have been overwhelmingly adopted and most people
81             are not even aware that the single quote can be used in this manner.
82             So, unless you're trying to obfuscate your code, don't use them.
83              
84             package Foo::Bar::Baz; #ok
85             package Foo'Bar'Baz; #not ok
86              
87              
88             =head1 CONFIGURATION
89              
90             This Policy is not configurable except for the standard options.
91              
92              
93             =head1 SEE ALSO
94              
95             L<perlmod|perlmod>
96              
97              
98             =head1 AUTHOR
99              
100             Elliot Shank C<< <perl@galumph.com> >>
101              
102              
103             =head1 COPYRIGHT
104              
105             Copyright (c) 2007-2014 Elliot Shank.
106              
107             This program is free software; you can redistribute it and/or modify
108             it under the same terms as Perl itself. The full text of this license
109             can be found in the LICENSE file included with this module.
110              
111             =cut
112              
113             # Local Variables:
114             # mode: cperl
115             # cperl-indent-level: 4
116             # fill-column: 78
117             # indent-tabs-mode: nil
118             # c-indentation-style: bsd
119             # End:
120             # ex: set ts=8 sts=4 sw=4 tw=78 ft=perl expandtab shiftround :