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   22396 use 5.010001;
  40         144  
4 40     40   199 use strict;
  40         63  
  40         705  
5 40     40   154 use warnings;
  40         79  
  40         1387  
6 40     40   179 use Readonly;
  40         62  
  40         1961  
7              
8 40     40   201 use Perl::Critic::Utils qw{ :characters :severities :classification };
  40         64  
  40         1918  
9 40     40   14927 use parent 'Perl::Critic::Policy';
  40         87  
  40         189  
10              
11             our $VERSION = '1.156';
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 90     90 0 520 sub supported_parameters { return () }
21 75     75 1 220 sub default_severity { return $SEVERITY_LOW }
22 74     74 1 261 sub default_themes { return qw(core maintenance certrec ) }
23 31     31 1 85 sub applies_to { return qw( PPI::Token::Word PPI::Token::Symbol ) }
24              
25             #-----------------------------------------------------------------------------
26              
27             sub violates {
28 505     505 1 628 my ( $self, $elem, undef ) = @_;
29 505         697 my $content = $elem->content();
30              
31 505 50       1373 if ( (index $content, $QUOTE) < 0 ) {
32 505         753 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 :