Benchmark-Perl-Formance-Cargo
view release on metacpan or search on metacpan
share/PerlCritic/Critic/PolicyFactory.pm view on Meta::CPAN
#-----------------------------------------------------------------------------
# Blech!!! This is ug-lee. Belongs in the constructor. And it shouldn't be
# called "test" mode.
sub import {
my ( $class, %args ) = @_;
my $test_mode = $args{-test};
my $extra_test_policies = $args{'-extra-test-policies'};
if ( not @site_policy_names ) {
my $eval_worked = eval {
require Module::Pluggable;
Module::Pluggable->import(search_path => $POLICY_NAMESPACE,
require => 1, inner => 0);
@site_policy_names = plugins(); #Exported by Module::Pluggable
1;
};
if (not $eval_worked) {
if ( $EVAL_ERROR ) {
throw_generic
qq<Can't load Policies from namespace "$POLICY_NAMESPACE": $EVAL_ERROR>;
}
throw_generic
qq<Can't load Policies from namespace "$POLICY_NAMESPACE" for an unknown reason.>;
}
if ( not @site_policy_names ) {
throw_generic
qq<No Policies found in namespace "$POLICY_NAMESPACE".>;
}
}
# In test mode, only load native policies, not third-party ones
if ( $test_mode && any {m/\b blib \b/xms} @INC ) {
@site_policy_names = _modules_from_blib( @site_policy_names );
if ($extra_test_policies) {
my @extra_policy_full_names =
map { "${POLICY_NAMESPACE}::$_" } @{$extra_test_policies};
push @site_policy_names, @extra_policy_full_names;
}
}
return 1;
}
#-----------------------------------------------------------------------------
# Some static helper subs
sub _modules_from_blib {
my (@modules) = @_;
return grep { _was_loaded_from_blib( _module2path($_) ) } @modules;
}
sub _module2path {
my $module = shift || return;
return File::Spec::Unix->catdir(split m/::/xms, $module) . '.pm';
}
sub _was_loaded_from_blib {
my $path = shift || return;
my $full_path = $INC{$path};
return $full_path && $full_path =~ m/ (?: \A | \b b ) lib \b /xms;
}
#-----------------------------------------------------------------------------
sub new {
my ( $class, %args ) = @_;
my $self = bless {}, $class;
$self->_init( %args );
return $self;
}
#-----------------------------------------------------------------------------
sub _init {
my ($self, %args) = @_;
my $profile = $args{-profile};
$self->{_profile} = $profile
or throw_internal q{The -profile argument is required};
my $incoming_errors = $args{-errors};
my $profile_strictness = $args{'-profile-strictness'};
$profile_strictness ||= $PROFILE_STRICTNESS_DEFAULT;
$self->{_profile_strictness} = $profile_strictness;
if ( $profile_strictness ne $PROFILE_STRICTNESS_QUIET ) {
my $errors;
# If we're supposed to be strict or problems have already been found...
if (
$profile_strictness eq $PROFILE_STRICTNESS_FATAL
or ( $incoming_errors and @{ $incoming_errors->exceptions() } )
) {
$errors =
$incoming_errors
? $incoming_errors
: Perl::Critic::Exception::AggregateConfiguration->new();
}
$self->_validate_policies_in_profile( $errors );
if (
not $incoming_errors
and $errors
and $errors->has_exceptions()
) {
$errors->rethrow();
}
}
return $self;
}
( run in 0.876 second using v1.01-cache-2.11-cpan-d7a12ab2c7f )