File Coverage

blib/lib/Perl/Critic/Policy/ClassHierarchies/ProhibitAutoloading.pm
Criterion Covered Total %
statement 24 25 96.0
branch 1 2 50.0
condition n/a
subroutine 11 11 100.0
pod 4 5 80.0
total 40 43 93.0


line stmt bran cond sub pod time code
1             package Perl::Critic::Policy::ClassHierarchies::ProhibitAutoloading;
2              
3 40     40   25969 use 5.010001;
  40         216  
4 40     40   263 use strict;
  40         126  
  40         811  
5 40     40   241 use warnings;
  40         124  
  40         985  
6 40     40   229 use Readonly;
  40         128  
  40         1926  
7              
8 40     40   307 use Perl::Critic::Utils qw{ :severities };
  40         114  
  40         1951  
9 40     40   4964 use parent 'Perl::Critic::Policy';
  40         167  
  40         251  
10              
11             our $VERSION = '1.150';
12              
13             #-----------------------------------------------------------------------------
14              
15             Readonly::Scalar my $DESC => q{AUTOLOAD method declared};
16             Readonly::Scalar my $EXPL => [ 393 ];
17              
18             #-----------------------------------------------------------------------------
19              
20 89     89 0 1586 sub supported_parameters { return () }
21 73     73 1 288 sub default_severity { return $SEVERITY_MEDIUM }
22 86     86 1 382 sub default_themes { return qw( core maintenance pbp ) }
23 30     30 1 97 sub applies_to { return 'PPI::Statement::Sub' }
24              
25             #-----------------------------------------------------------------------------
26              
27             sub violates {
28 5     5 1 19 my ($self, $elem, undef) = @_;
29              
30 5 50       23 if( $elem->name eq 'AUTOLOAD' ) {
31 0         0 return $self->violation( $DESC, $EXPL, $elem );
32             }
33 5         326 return; #ok!
34             }
35              
36             1;
37              
38             #-----------------------------------------------------------------------------
39              
40             __END__
41              
42             =pod
43              
44             =head1 NAME
45              
46             Perl::Critic::Policy::ClassHierarchies::ProhibitAutoloading - AUTOLOAD methods should be avoided.
47              
48              
49             =head1 AFFILIATION
50              
51             This Policy is part of the core L<Perl::Critic|Perl::Critic>
52             distribution.
53              
54              
55             =head1 DESCRIPTION
56              
57             Declaring a subroutine with the name C<"AUTOLOAD"> will violate this
58             Policy. The C<AUTOLOAD> mechanism is an easy way to generate methods
59             for your classes, but unless they are carefully written, those classes
60             are difficult to inherit from. And over time, the C<AUTOLOAD> method
61             will become more and more complex as it becomes responsible for
62             dispatching more and more functions. You're better off writing
63             explicit accessor methods. Editor macros can help make this a little
64             easier.
65              
66              
67             =head1 CONFIGURATION
68              
69             This Policy is not configurable except for the standard options.
70              
71              
72             =head1 AUTHOR
73              
74             Jeffrey Ryan Thalhammer <jeff@imaginative-software.com>
75              
76              
77             =head1 COPYRIGHT
78              
79             Copyright (c) 2006-2011 Imaginative Software Systems. All rights reserved.
80              
81             This program is free software; you can redistribute it and/or modify
82             it under the same terms as Perl itself.
83              
84             =cut
85              
86             # Local Variables:
87             # mode: cperl
88             # cperl-indent-level: 4
89             # fill-column: 78
90             # indent-tabs-mode: nil
91             # c-indentation-style: bsd
92             # End:
93             # ex: set ts=8 sts=4 sw=4 tw=78 ft=perl expandtab shiftround :