Login
In partial response to Schwern's patch for "non-program"
authorElliot Shank <perl@galumph.com>
Sun, 7 Sep 2008 08:59:38 +0000 (08:59 +0000)
committerElliot Shank <perl@galumph.com>
Sun, 7 Sep 2008 08:59:38 +0000 (08:59 +0000)
Policies, add P::C::Policy::is_document_exempt() (which
I've wanted for a while).

lib/Perl/Critic.pm
lib/Perl/Critic/Policy.pm

index 00255aa..fce63bd 100644 (file)
@@ -187,15 +187,17 @@ sub _is_ppi_doc {
 #-----------------------------------------------------------------------------
 
 sub _critique {
-
     my ($policy, $doc, $is_line_disabled) = @_;
-    my @violations = ();
+
+    return if $policy->is_document_exempt($doc);
+
     my $maximum_violations = $policy->get_maximum_violations_per_document();
 
     if (defined $maximum_violations && $maximum_violations == 0) {
         return;
     }
 
+    my @violations = ();
     my $policy_name = $policy->get_long_name();
 
   TYPE:
index f7314cb..468cc2f 100644 (file)
@@ -122,6 +122,12 @@ sub initialize_if_enabled {
 
 #-----------------------------------------------------------------------------
 
+sub is_document_exempt {
+    return $FALSE;
+}
+
+#-----------------------------------------------------------------------------
+
 sub _validate_config_keys {
     my ( $self, $errors, $config ) = @_;
 
@@ -562,10 +568,11 @@ This constructor is always called regardless of whether the user has
 enabled this Policy or not.
 
 
-=item C<< initialize_if_enabled( { key1 => value1, key2 => value2 ... } ) >>
+=item C<< initialize_if_enabled( $config ) >>
 
-This receives the same parameters as C<new()>, but as a reference to a
-hash, and is only invoked if this Policy is enabled by the user.
+This receives an instance of
+L<Perl::Critic::PolicyConfig|Perl::Critic::PolicyConfig> as a
+parameter, and is only invoked if this Policy is enabled by the user.
 Thus, this is the preferred place for subclasses to do any
 initialization.
 
@@ -577,6 +584,12 @@ available should test for the availability of these dependencies and
 return C<$FALSE> if they are not.
 
 
+=item C<< is_document_exempt( $document ) >>
+
+Answers whether the argument is exempt from this Policy.  By default,
+returns C<$FALSE>.
+
+
 =item C< violates( $element, $document ) >
 
 Given a L<PPI::Element|PPI::Element> and a