1 package Perl::Critic::Policy::Dynamic::Moose;
4 extends 'Perl::Critic::DynamicPolicy';
8 isa => 'PPI::Document',
11 sub applies_to { 'PPI::Document' }
12 sub applies_to_metaclass { 'Class::MOP::Class' }
14 around violation => sub {
19 my $doc = shift || $self->document;
21 return $self->$orig($desc, $expl, $doc, @_);
24 sub violates_dynamic {
28 $self->document($doc);
29 $self->compile_document;
31 my @packages = $self->find_packages;
34 for my $package (@packages) {
35 my $meta = Class::MOP::class_of($package)
38 grep { $meta->isa($_) } $self->applies_to_metaclass
41 push @violations, $self->violates_metaclass($meta, $doc);
47 sub compile_document {
49 my $doc = $self->document;
52 die "Unable to execute " . $doc->file . ": $@";
57 my $doc = $self->document;
59 return map { $_->namespace }
60 @{ $doc->find('PPI::Statement::Package') || [] };
63 __PACKAGE__->meta->make_immutable;