File Coverage

blib/lib/Perl/Critic/Policy/Variables/ProhibitPerl4PackageNames.pm
Criterion Covered Total %
statement 25 30 83.3
branch 1 6 16.6
condition 0 3 0.0
subroutine 11 11 100.0
pod 4 5 80.0
total 41 55 74.5


line stmt bran cond sub pod time code
1             package Perl::Critic::Policy::Variables::ProhibitPerl4PackageNames;
2              
3 40     40   26332 use 5.010001;
  40         189  
4 40     40   279 use strict;
  40         120  
  40         895  
5 40     40   243 use warnings;
  40         120  
  40         943  
6 40     40   225 use Readonly;
  40         120  
  40         2039  
7              
8 40     40   343 use Perl::Critic::Utils qw{ :characters :severities :classification };
  40         144  
  40         2093  
9 40     40   19737 use parent 'Perl::Critic::Policy';
  40         157  
  40         280  
10              
11             our $VERSION = '1.150';
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 89     89 0 1605 sub supported_parameters { return () }
21 74     74 1 315 sub default_severity { return $SEVERITY_LOW }
22 74     74 1 431 sub default_themes { return qw(core maintenance certrec ) }
23 30     30 1 109 sub applies_to { return qw( PPI::Token::Word PPI::Token::Symbol ) }
24              
25             #-----------------------------------------------------------------------------
26              
27             sub violates {
28 501     501 1 773 my ( $self, $elem, undef ) = @_;
29 501         874 my $content = $elem->content();
30              
31 501 50       1735 if ( (index $content, $QUOTE) < 0 ) {
32 501         1000 return;
33             }
34              
35 0 0         if ( $content =~ m< \A [\$@%&*] ' \z >xms ) {
36             # We've found $POSTMATCH.
37 0           return;
38             }
39              
40 0 0 0       if ( $elem->isa('PPI::Token::Word') && is_hash_key($elem) ) {
41 0           return;
42             }
43              
44             return
45 0           $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 :