package Perl::Critic::Policy::ProhibitOrReturn;
use 5.008001;
use strict;
use warnings;
use parent 'Perl::Critic::Policy';
use constant DESC => '`or return` in source file';
use constant EXPL => '`or return` is prohibited. Use equivalent conditional statement instead.';
use Perl::Critic::Utils qw( :severities );
our $VERSION = "0.02";
sub supported_parameters { return (); }
sub default_severity { return $SEVERITY_MEDIUM; }
sub default_themes { return qw(bugs complexity maintenance); }
sub applies_to { return 'PPI::Token::Word'; }
sub violates {
my ($self, $elem, undef) = @_;
return if $elem->content ne 'return';
my $sprev = $elem->sprevious_sibling;
return if !$sprev;
return if $sprev->content ne 'or';
return $self->violation(DESC, EXPL, $elem->parent);
}
1;
__END__
=encoding utf-8
=head1 NAME
Perl::Critic::Policy::ProhibitOrReturn - Do not use `or return`
=head1 AFFILIATION
This policy is a policy in the L<Perl::Critic::Policy::ProhibitOrReturn> distribution.
=head1 DESCRIPTION
Avoid using C<or return>. Consider using equivalent C<if> (or C<unless>) statement instead.
# not ok
sub foo {
my ($x) = @_;
$x or return;
...
}
# ok
sub foo {
my ($x) = @_;
return if !$x;
...
}
=head1 CONFIGURATION
This Policy is not configurable except for the standard options.
=head1 LICENSE
Copyright (C) utgwkk.
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
=head1 AUTHOR
utgwkk E<lt>utagawakiki@gmail.comE<gt>
=cut