1 package Perl::Critic::Policy::DynamicMoose::ProhibitPublicBuilders;
3 extends 'Perl::Critic::Policy::DynamicMoose';
5 use Perl::Critic::Utils ':severities';
6 use Perl::Critic::Utils::Moose 'meta_type';
8 Readonly::Scalar my $EXPL => q{Prefix builder method names with an underscore};
9 sub default_severity { $SEVERITY_MEDIUM }
11 augment applies_to_metaclass => sub { 'Moose::Meta::Role' };
13 sub violates_metaclass {
17 my $classname = $meta->name;
21 my $attributes = $meta->get_attribute_map;
22 for my $name (keys %$attributes) {
23 my $attribute = $attributes->{$name};
26 if (blessed($attribute)) {
27 next if !$attribute->has_builder;
28 $builder = $attribute->builder;
32 next if !defined($attribute->{builder});
33 $builder = $attribute->{builder};
36 if ($builder !~ /^_/) {
37 my $type = meta_type($meta);
38 my $desc = "Builder method '$builder' of attribute '$attribute' of $type '$classname' is public";
39 push @violations, $self->violation($desc, $EXPL);