Benchmark-Perl-Formance-Cargo
view release on metacpan or search on metacpan
share/PerlCritic/Critic/Policy/ValuesAndExpressions/ProhibitMagicNumbers.pm view on Meta::CPAN
{
name => 'allow_to_the_right_of_a_fat_comma',
description =>
q[Should anything to the right of a "=>" be allowed?],
default_string => '1',
behavior => 'boolean',
},
);
}
sub default_severity { return $SEVERITY_LOW }
sub default_themes { return qw( core maintenance ) }
sub applies_to { return 'PPI::Token::Number' }
sub default_maximum_violations_per_document { return 10; }
#----------------------------------------------------------------------------
sub initialize_if_enabled {
my ($self, $config) = @_;
$self->_determine_checked_types();
return $TRUE;
}
sub _parse_allowed_values {
my ($self, $parameter, $config_string) = @_;
my ( $all_integers_allowed, $allowed_values )
= _determine_allowed_values($config_string);
my $allowed_string = ' is not one of the allowed literal values (';
if ($all_integers_allowed) {
$allowed_string .= 'all integers';
if ( %{$allowed_values} ) {
$allowed_string .= ', ';
}
}
$allowed_string
.= ( join ', ', sort { $a <=> $b } keys %{$allowed_values} ) . ').'
. $USE_READONLY_OR_CONSTANT;
$self->{_allowed_values} = $allowed_values;
$self->{_all_integers_allowed} = $all_integers_allowed;
$self->{_allowed_string} = $allowed_string;
return;
}
sub _determine_allowed_values {
my ($config_string) = @_;
my @allowed_values;
my @potential_allowed_values;
my $all_integers_allowed = 0;
if ( defined $config_string ) {
my @allowed_values_strings =
grep {$_} split m/\s+/xms, $config_string;
foreach my $value_string (@allowed_values_strings) {
if ($value_string eq 'all_integers') {
$all_integers_allowed = 1;
} elsif ( $value_string =~ m/ \A $SIGNED_NUMBER \z /xms ) {
push @potential_allowed_values, $value_string + 0;
} elsif ( $value_string =~ m/$RANGE/xms ) {
my ( $minimum, $maximum, $increment ) = ($1, $2, $3);
$increment ||= 1;
$minimum += 0;
$maximum += 0;
$increment += 0;
for ( ## no critic (ProhibitCStyleForLoops)
my $value = $minimum;
$value <= $maximum;
$value += $increment
) {
push @potential_allowed_values, $value;
}
} else {
die q{Invalid value for allowed_values: }, $value_string,
q{. Must be a number, a number range, or},
qq{ "all_integers".\n};
}
}
if ($all_integers_allowed) {
@allowed_values = grep { $_ != int $_ } @potential_allowed_values;
} else {
@allowed_values = @potential_allowed_values;
}
} else {
@allowed_values = (2);
}
if ( not $all_integers_allowed ) {
push @allowed_values, 0, 1;
}
my %allowed_values = hashify(@allowed_values);
return ( $all_integers_allowed, \%allowed_values );
}
sub _determine_checked_types {
my ($self) = @_;
my %checked_types = (
'PPI::Token::Number::Binary' => 'Binary literals (',
'PPI::Token::Number::Float' => 'Floating-point literals (',
'PPI::Token::Number::Exp' => 'Exponential literals (',
'PPI::Token::Number::Hex' => 'Hexadecimal literals (',
'PPI::Token::Number::Octal' => 'Octal literals (',
'PPI::Token::Number::Version' => 'Version literals (',
);
# This will be set by the enumeration behavior specified in
# supported_parameters() above.
my $allowed_types = $self->{_allowed_types};
( run in 2.060 seconds using v1.01-cache-2.11-cpan-d7a12ab2c7f )