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   26549 use 5.010001;
  40         168  
4 40     40   283 use strict;
  40         117  
  40         954  
5 40     40   223 use warnings;
  40         100  
  40         956  
6 40     40   263 use Readonly;
  40         110  
  40         2080  
7              
8 40     40   280 use Perl::Critic::Utils qw{ :characters :severities :classification };
  40         118  
  40         2065  
9 40     40   19663 use parent 'Perl::Critic::Policy';
  40         125  
  40         315  
10              
11             our $VERSION = '1.146';
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 1666 sub supported_parameters { return () }
21 146     146 1 594 sub default_severity { return $SEVERITY_LOW }
22 74     74 1 381 sub default_themes { return qw(core maintenance certrec ) }
23 47     47 1 178 sub applies_to { return qw( PPI::Token::Word PPI::Token::Symbol ) }
24              
25             #-----------------------------------------------------------------------------
26              
27             sub violates {
28 848     848 1 1592 my ( $self, $elem, undef ) = @_;
29 848         1721 my $content = $elem->content();
30              
31 848 100       3571 if ( (index $content, $QUOTE) < 0 ) {
32 772         1923 return;
33             }
34              
35 76 100       233 if ( $content =~ m< \A [\$@%&*] ' \z >xms ) {
36             # We've found $POSTMATCH.
37 2         6 return;
38             }
39              
40 74 100 100     416 if ( $elem->isa('PPI::Token::Word') && is_hash_key($elem) ) {
41 2         31 return;
42             }
43              
44             return
45 72         537 $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 :