X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FPerl%2FCritic%2FPolicy%2FDynamicMoose%2FProhibitPublicBuilders.pm;h=9cbbe5d0edb31fb87442bf118a249de986444259;hb=c562b9cbe41b48f3685b49ed15d928e0a3430597;hp=90155abcf281c612421066d32d980461d4cc29ff;hpb=914f300c017509173ef3d6b5e553e69ff7e52740;p=gitmo%2FPerl-Critic-Dynamic-Moose.git diff --git a/lib/Perl/Critic/Policy/DynamicMoose/ProhibitPublicBuilders.pm b/lib/Perl/Critic/Policy/DynamicMoose/ProhibitPublicBuilders.pm index 90155ab..9cbbe5d 100644 --- a/lib/Perl/Critic/Policy/DynamicMoose/ProhibitPublicBuilders.pm +++ b/lib/Perl/Critic/Policy/DynamicMoose/ProhibitPublicBuilders.pm @@ -2,7 +2,11 @@ package Perl::Critic::Policy::DynamicMoose::ProhibitPublicBuilders; use Moose; extends 'Perl::Critic::Policy::DynamicMoose'; +use Perl::Critic::Utils ':severities'; +use Perl::Critic::Utils::Moose 'meta_type'; + Readonly::Scalar my $EXPL => q{Prefix builder method names with an underscore}; +sub default_severity { $SEVERITY_MEDIUM } augment applies_to_metaclass => sub { 'Moose::Meta::Role' }; @@ -30,7 +34,8 @@ sub violates_metaclass { } if ($builder !~ /^_/) { - my $desc = "Builder method '$builder' of attribute '$attribute' of class '$classname' is public"; + my $type = meta_type($meta); + my $desc = "Builder method '$builder' of attribute '$attribute' of $type '$classname' is public"; push @violations, $self->violation($desc, $EXPL); } } @@ -42,3 +47,33 @@ no Moose; 1; +__END__ + +=head1 NAME + +Perl::Critic::Policy::DynamicMoose::ProhibitPublicBuilders + +=head1 DESCRIPTION + +An attribute's L method is used to provide a default value +for that attribute. Such methods are rarely intended for external use, and +should not be considered part of that class's public API. Thus we recommend +that your attribute builder methods' names are prefixed with an underscore +to mark them private. + +=head1 WARNING + +B Most L Policies (including all the ones that +ship with Perl::Critic> use pure static analysis -- they never compile nor +execute any of the code that they analyze. However, this policy is very +different. It actually attempts to compile your code and then compares the +subroutines mentioned in your code to those found in the symbol table. +Therefore you should B use this Policy on any code that you do not trust, +or may have undesirable side-effects at compile-time (such as connecting to the +network or mutating files). + +For this Policy to work, all the modules included in your code must be +installed locally, and must compile without error. + +=cut +