diff options
author | Graham Ollis <plicease@cpan.org> | 2019-07-17 23:02:52 -0400 |
---|---|---|
committer | Graham✈️✈️ <plicease@cpan.org> | 2019-07-18 06:27:10 -0400 |
commit | 10e1f859a24a30d6a8770957baea444861aadc08 (patch) | |
tree | 81b464b98bd60ada85632f8d8a8577fbe27e60cf | |
parent | 574ac0ee8a1ca733659a444a0aa84d90c3ac02f3 (diff) |
add perlcritic to the mix
-rw-r--r-- | dist.ini | 6 | ||||
-rw-r--r-- | lib/Class/Inspector.pm | 14 | ||||
-rw-r--r-- | lib/Class/Inspector/Functions.pm | 3 | ||||
-rw-r--r-- | perlcriticrc | 50 | ||||
-rw-r--r-- | t/00_diag.t | 14 | ||||
-rw-r--r-- | t/class_inspector.t | 19 | ||||
-rw-r--r-- | t/class_inspector__devel_hide.t | 2 | ||||
-rw-r--r-- | t/class_inspector_functions.t | 2 | ||||
-rw-r--r-- | xt/author/critic.t | 14 |
9 files changed, 106 insertions, 18 deletions
@@ -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; |