File Coverage

blib/lib/Perl/Critic/Policy/ClassHierarchies/ProhibitAutoloading.pm
Criterion Covered Total %
statement 25 25 100.0
branch 2 2 100.0
condition n/a
subroutine 11 11 100.0
pod 4 5 80.0
total 42 43 97.6


line stmt bran cond sub pod time code
1             package Perl::Critic::Policy::ClassHierarchies::ProhibitAutoloading;
2              
3 40     40   26404 use 5.010001;
  40         197  
4 40     40   293 use strict;
  40         117  
  40         847  
5 40     40   247 use warnings;
  40         129  
  40         1042  
6 40     40   263 use Readonly;
  40         144  
  40         2111  
7              
8 40     40   320 use Perl::Critic::Utils qw{ :severities };
  40         181  
  40         1983  
9 40     40   5104 use parent 'Perl::Critic::Policy';
  40         156  
  40         263  
10              
11             our $VERSION = '1.148';
12              
13             #-----------------------------------------------------------------------------
14              
15             Readonly::Scalar my $DESC => q{AUTOLOAD method declared};
16             Readonly::Scalar my $EXPL => [ 393 ];
17              
18             #-----------------------------------------------------------------------------
19              
20 92     92 0 1678 sub supported_parameters { return () }
21 75     75 1 376 sub default_severity { return $SEVERITY_MEDIUM }
22 86     86 1 373 sub default_themes { return qw( core maintenance pbp ) }
23 33     33 1 139 sub applies_to { return 'PPI::Statement::Sub' }
24              
25             #-----------------------------------------------------------------------------
26              
27             sub violates {
28 8     8 1 45 my ($self, $elem, undef) = @_;
29              
30 8 100       46 if( $elem->name eq 'AUTOLOAD' ) {
31 2         143 return $self->violation( $DESC, $EXPL, $elem );
32             }
33 6         524 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 :