File: RequireFinalReturn.run

package info (click to toggle)
libperl-critic-perl 1.088-1
  • links: PTS, VCS
  • area: main
  • in suites: lenny
  • size: 2,792 kB
  • ctags: 1,556
  • sloc: perl: 17,417; lisp: 340; makefile: 2
file content (158 lines) | stat: -rw-r--r-- 4,193 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
##############################################################################
#     $URL: http://perlcritic.tigris.org/svn/perlcritic/trunk/Perl-Critic/t/Subroutines/RequireFinalReturn.run $
#    $Date: 2008-03-16 17:40:45 -0500 (Sun, 16 Mar 2008) $
#   $Author: clonezone $
# $Revision: 2187 $
##############################################################################


#-----------------------------------------------------------------------------

## name basic passes
## failures 0
## cut
sub foo { }
sub bar;
sub baz { return; }
sub quux { return {some => [qw(complicated data)], q{ } => /structure/}; }

#-----------------------------------------------------------------------------

## name complex passes
## failures 0
## cut
sub foo { if ($bool) { return; } else { return; } }
sub bar { unless ($bool) { return; } else { return; } }
sub baz { if ($bool) { return; } elsif ($bool2) { return; } else { return; } }
sub quuz { unless ($bool) { return; } elsif ($bool2) { return; } else { return; } }

#-----------------------------------------------------------------------------

## name ternary returns
## failures 0
## TODO We are not yet detecting ternaries
## cut
sub foo { 1 ? return : 2 ? return : return; }

#-----------------------------------------------------------------------------

## name returning ternaries
## failures 0
## cut
sub foo { return 1 ? 1 : 2 ? 2 : 3; }

#-----------------------------------------------------------------------------

## name implicit returns fail
## failures 2
## cut
sub foo { 1 }
sub foo { 'Club sandwich'; }

#-----------------------------------------------------------------------------

## name return in a constant loop
## failures 1
## cut
sub foo { while (1==1) { return; } }

#-----------------------------------------------------------------------------

## name not all code paths returns
## failures 3
## cut
sub foo { if ($bool) { } else { } }
sub foo { if ($bool) { $foo = 'bar'; } else { return; } }
sub foo { unless ($bool) { $foo = 'bar'; } else { return; } }

#-----------------------------------------------------------------------------

## name special blocks exemption
## failures 0
## cut
BEGIN {
  print 'this should not need a return';
}
INIT {
  print 'nor this';
}
CHECK {
  print 'nor this';
}
END {
  print 'nor this';
}

#-----------------------------------------------------------------------------

## name goto is equivalent to return
## failures 0
## cut
sub foo { goto &bar; }
END_PERL

#-----------------------------------------------------------------------------

## name next and last are not equivalent to return (and are invalid Perl)
## failures 2
## cut
sub foo { next; }
sub bar { last; }

#-----------------------------------------------------------------------------

## name abnormal termination is allowed
## failures 0
## cut
sub foo   { die; }
sub bar   { croak; }
sub baz   { confess; }
sub bar_C { Carp::croak; }
sub baz_C { Carp::confess; }
sub quux  { exit; }
sub quux2 { throw 'nuts'; }

#-----------------------------------------------------------------------------

## name Final return is present, but conditional
## failures 4
## cut
sub foo   { die if $condition }
sub bar   { croak unless $condition }
sub baz   { exit for @condition }
sub quux  { throw 'nuts'if not $condition }

#-----------------------------------------------------------------------------

## name Compound final return is present, but conditional
## failures 1
## cut
sub foo {

    if( $condition ) {
        return if $today_is_tuesday;
    }
    else {
        exit unless $today_is_wednesday;
    }
}

#-----------------------------------------------------------------------------

## name Custom terminals
## parms { terminal_funcs => 'bailout abort quit' };
## failures 0
## cut
sub foo  { if ($condition) { return 1; }else{ abort } }
sub bar  { if ($condition) { bailout }else{ return 1 } }
sub baz  { quit }

##############################################################################
# Local Variables:
#   mode: cperl
#   cperl-indent-level: 4
#   fill-column: 78
#   indent-tabs-mode: nil
#   c-indentation-style: bsd
# End:
# ex: set ts=8 sts=4 sw=4 tw=78 ft=perl expandtab shiftround :