summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGraham Ollis <plicease@cpan.org>2019-07-17 23:02:52 -0400
committerGraham✈️✈️ <plicease@cpan.org>2019-07-18 06:27:10 -0400
commit10e1f859a24a30d6a8770957baea444861aadc08 (patch)
tree81b464b98bd60ada85632f8d8a8577fbe27e60cf
parent574ac0ee8a1ca733659a444a0aa84d90c3ac02f3 (diff)
add perlcritic to the mix
-rw-r--r--dist.ini6
-rw-r--r--lib/Class/Inspector.pm14
-rw-r--r--lib/Class/Inspector/Functions.pm3
-rw-r--r--perlcriticrc50
-rw-r--r--t/00_diag.t14
-rw-r--r--t/class_inspector.t19
-rw-r--r--t/class_inspector__devel_hide.t2
-rw-r--r--t/class_inspector_functions.t2
-rw-r--r--xt/author/critic.t14
9 files changed, 106 insertions, 18 deletions
diff --git a/dist.ini b/dist.ini
index 8368a3b..0755305 100644
--- a/dist.ini
+++ b/dist.ini
@@ -36,8 +36,12 @@ File::Spec = 0.80
remove = strict
remove = warnings
remove = vars
-remove = Exporter
remove = constant
+remove = utf8
+remove = Exporter
+
+; optional test dep
+remove = Devel::Hide
[Author::Plicease::Upload]
cpan = 1
diff --git a/lib/Class/Inspector.pm b/lib/Class/Inspector.pm
index 711365f..6760362 100644
--- a/lib/Class/Inspector.pm
+++ b/lib/Class/Inspector.pm
@@ -48,7 +48,10 @@ an easier, more friendly interface to this information.
# We can safely ignore any failure here.
BEGIN {
local $@;
- eval "require utf8; utf8->import";
+ eval {
+ require utf8;
+ utf8->import;
+ };
}
# Predefine some regexs
@@ -458,7 +461,8 @@ sub methods {
while ( my $cl = shift @queue ) {
push @path, $cl;
unshift @queue, grep { ! $seen{$_}++ }
- map { s/^::/main::/; s/\'/::/g; $_ }
+ map { s/^::/main::/; s/\'/::/g; $_ } ## no critic
+ map { "$_" }
( @{"${cl}::ISA"} );
}
@@ -552,7 +556,7 @@ sub subclasses {
sub _subnames {
my ($class, $name) = @_;
return sort
- grep {
+ grep { ## no critic
substr($_, -2, 2, '') eq '::'
and
/$RE_IDENTIFIER/o
@@ -578,7 +582,7 @@ sub children {
# Find all the Foo:: elements in our symbol table
no strict 'refs';
- map { "${name}::$_" } sort grep { s/::$// } keys %{"${name}::"};
+ map { "${name}::$_" } sort grep { s/::$// } keys %{"${name}::"}; ## no critic
}
# As above, but recursively
@@ -594,7 +598,7 @@ sub recursive_children {
while ( my $namespace = $children[$i++] ) {
push @children, map { "${namespace}::$_" }
grep { ! /^::/ } # Ignore things like ::ISA::CACHE::
- grep { s/::$// }
+ grep { s/::$// } ## no critic
keys %{"${namespace}::"};
}
diff --git a/lib/Class/Inspector/Functions.pm b/lib/Class/Inspector/Functions.pm
index 25b30d6..2e7b7fa 100644
--- a/lib/Class/Inspector/Functions.pm
+++ b/lib/Class/Inspector/Functions.pm
@@ -5,13 +5,12 @@ use strict;
use warnings;
use Exporter ();
use Class::Inspector ();
+use base qw( Exporter );
# ABSTRACT: Get information about a class and its structure
# VERSION
BEGIN {
- our @ISA = 'Exporter';
-
our @EXPORT = qw(
installed
diff --git a/perlcriticrc b/perlcriticrc
new file mode 100644
index 0000000..a58a195
--- /dev/null
+++ b/perlcriticrc
@@ -0,0 +1,50 @@
+severity = 1
+only = 1
+
+[Freenode::ArrayAssignAref]
+[Freenode::BarewordFilehandles]
+[Freenode::ConditionalDeclarations]
+[Freenode::ConditionalImplicitReturn]
+[Freenode::DeprecatedFeatures]
+[Freenode::DiscouragedModules]
+[Freenode::DollarAB]
+[Freenode::Each]
+[Freenode::EmptyReturn]
+[Freenode::IndirectObjectNotation]
+[Freenode::LexicalForeachIterator]
+[Freenode::LoopOnHash]
+[Freenode::ModPerl]
+[Freenode::OpenArgs]
+[Freenode::OverloadOptions]
+[Freenode::POSIXImports]
+[Freenode::PackageMatchesFilename]
+[Freenode::PreferredAlternatives]
+[Freenode::Prototypes]
+[Freenode::StrictWarnings]
+extra_importers = Test2::V0
+[Freenode::Threads]
+[Freenode::Wantarray]
+[Freenode::WarningsSwitch]
+[Freenode::WhileDiamondDefaultAssignment]
+
+[BuiltinFunctions::ProhibitBooleanGrep]
+[BuiltinFunctions::ProhibitStringyEval]
+[BuiltinFunctions::ProhibitStringySplit]
+[BuiltinFunctions::ProhibitVoidGrep]
+[BuiltinFunctions::ProhibitVoidMap]
+[ClassHierarchies::ProhibitExplicitISA]
+[ClassHierarchies::ProhibitOneArgBless]
+[CodeLayout::ProhibitHardTabs]
+allow_leading_tabs = 0
+[CodeLayout::ProhibitTrailingWhitespace]
+[CodeLayout::RequireConsistentNewlines]
+[ControlStructures::ProhibitLabelsWithSpecialBlockNames]
+[ControlStructures::ProhibitMutatingListFunctions]
+[ControlStructures::ProhibitUnreachableCode]
+[InputOutput::ProhibitBarewordFileHandles]
+[InputOutput::ProhibitJoinedReadline]
+[InputOutput::ProhibitTwoArgOpen]
+[Miscellanea::ProhibitFormats]
+[Miscellanea::ProhibitUselessNoCritic]
+[Modules::ProhibitConditionalUseStatements]
+;[Modules::RequireEndWithOne]
diff --git a/t/00_diag.t b/t/00_diag.t
index 68709a5..f1e814f 100644
--- a/t/00_diag.t
+++ b/t/00_diag.t
@@ -30,7 +30,7 @@ pass 'okay';
my $max = 1;
$max = $_ > $max ? $_ : $max for map { length $_ } @modules;
-our $format = "%-${max}s %s";
+our $format = "%-${max}s %s";
spacer;
@@ -39,13 +39,13 @@ my @keys = sort grep /(MOJO|PERL|\A(LC|HARNESS)_|\A(SHELL|LANG)\Z)/i, keys %ENV;
if(@keys > 0)
{
diag "$_=$ENV{$_}" for @keys;
-
+
if($ENV{PERL5LIB})
{
spacer;
diag "PERL5LIB path";
diag $_ for split $Config{path_sep}, $ENV{PERL5LIB};
-
+
}
elsif($ENV{PERLLIB})
{
@@ -53,7 +53,7 @@ if(@keys > 0)
diag "PERLLIB path";
diag $_ for split $Config{path_sep}, $ENV{PERLLIB};
}
-
+
spacer;
}
@@ -61,9 +61,11 @@ diag sprintf $format, 'perl ', $];
foreach my $module (@modules)
{
- if(eval qq{ require $module; 1 })
+ my $pm = "$module.pm";
+ $pm =~ s{::}{/}g;
+ if(eval { require $pm; 1 })
{
- my $ver = eval qq{ \$$module\::VERSION };
+ my $ver = eval { $module->VERSION };
$ver = 'undef' unless defined $ver;
diag sprintf $format, $module, $ver;
}
diff --git a/t/class_inspector.t b/t/class_inspector.t
index 8fcbe7e..70375e8 100644
--- a/t/class_inspector.t
+++ b/t/class_inspector.t
@@ -4,7 +4,7 @@
use strict;
use warnings;
-use Test::More tests => 54;
+use Test::More tests => 56;
use Class::Inspector ();
# To make maintaining this a little faster,
@@ -313,10 +313,25 @@ PACKAGES: {
our $VERSION = '0.01';
package My::Bar;
our $VERSION = '0.01';
- our @ISA = 'My::Foo';
+ use base qw( My::Foo );
}
TESTS: {
my $rv = Class::Inspector->subclasses( 'My::Foo' );
is_deeply( $rv, [ 'My::Bar' ],
'->subclasses in the presence of an evil ->isa does not crash' );
}
+
+
+{
+ {
+ package Baz;
+
+ our @ISA = qw( ::foo bar'baz ); ## no critic
+ }
+
+ is_deeply \@Baz::ISA, [qw( ::foo bar'baz )];
+
+ Class::Inspector->methods('Baz');
+
+ is_deeply \@Baz::ISA, [qw( ::foo bar'baz )];
+}
diff --git a/t/class_inspector__devel_hide.t b/t/class_inspector__devel_hide.t
index f18796a..9789709 100644
--- a/t/class_inspector__devel_hide.t
+++ b/t/class_inspector__devel_hide.t
@@ -3,7 +3,7 @@ use warnings;
use Test::More;
use Class::Inspector;
-eval q{ use Devel::Hide };
+eval { require Devel::Hide };
plan skip_all => 'test requires Devel::Hide' if $@;
plan tests => 2;
diff --git a/t/class_inspector_functions.t b/t/class_inspector_functions.t
index 2985bbc..3672085 100644
--- a/t/class_inspector_functions.t
+++ b/t/class_inspector_functions.t
@@ -114,5 +114,5 @@ sub MyHook::INC {
open my $fh, '<', __FILE__;
return $fh;
}
- return;
+ return ();
}
diff --git a/xt/author/critic.t b/xt/author/critic.t
new file mode 100644
index 0000000..0c03a4f
--- /dev/null
+++ b/xt/author/critic.t
@@ -0,0 +1,14 @@
+use Test2::Require::Module 'Test2::Tools::PerlCritic';
+use Test2::Require::Module 'Perl::Critic';
+use Test2::Require::Module 'Perl::Critic::Freenode';
+use Test2::V0;
+use Perl::Critic;
+use Test2::Tools::PerlCritic;
+
+my $critic = Perl::Critic->new(
+ -profile => 'perlcriticrc',
+);
+
+perl_critic_ok ['lib','t'], $critic;
+
+done_testing;