Login
Vanquised can_be_disabled() method.
authorJeffrey Ryan Thalhammer <jeff@imaginative-software.com>
Sun, 26 Oct 2008 06:52:49 +0000 (06:52 +0000)
committerJeffrey Ryan Thalhammer <jeff@imaginative-software.com>
Sun, 26 Oct 2008 06:52:49 +0000 (06:52 +0000)
lib/Perl/Critic.pm
lib/Perl/Critic/Policy.pm
t/99_pod_coverage.t

index c01fd99..0406ad2 100644 (file)
@@ -28,7 +28,7 @@ use Perl::Critic::Config;
 use Perl::Critic::Violation;
 use Perl::Critic::Document;
 use Perl::Critic::Statistics;
 use Perl::Critic::Violation;
 use Perl::Critic::Document;
 use Perl::Critic::Statistics;
-use Perl::Critic::Utils qw{ :characters };
+use Perl::Critic::Utils qw{ :characters hashify };
 
 #-----------------------------------------------------------------------------
 
 
 #-----------------------------------------------------------------------------
 
@@ -192,6 +192,7 @@ sub _critique {
     return if not $policy->prepare_to_scan_document($doc);
 
     my $maximum_violations = $policy->get_maximum_violations_per_document();
     return if not $policy->prepare_to_scan_document($doc);
 
     my $maximum_violations = $policy->get_maximum_violations_per_document();
+    my %policies_that_cannot_be_disabled = hashify(_policies_that_cannot_be_disabled());
 
     if (defined $maximum_violations && $maximum_violations == 0) {
         return;
 
     if (defined $maximum_violations && $maximum_violations == 0) {
         return;
@@ -216,9 +217,9 @@ sub _critique {
                 my $line = $violation->location()->[0];
                 if (exists $is_line_disabled->{$line}) {
                     next VIOLATION if $is_line_disabled->{$line}->{$policy_name}
                 my $line = $violation->location()->[0];
                 if (exists $is_line_disabled->{$line}) {
                     next VIOLATION if $is_line_disabled->{$line}->{$policy_name}
-                        && $policy->can_be_disabled();
+                        && not exists $policies_that_cannot_be_disabled{$policy_name}; 
                     next VIOLATION if $is_line_disabled->{$line}->{ALL}
                     next VIOLATION if $is_line_disabled->{$line}->{ALL}
-                        && $policy->can_be_disabled();
+                        && not exists $policies_that_cannot_be_disabled{$policy_name};
                 }
 
                 push @violations, $violation;
                 }
 
                 push @violations, $violation;
@@ -397,10 +398,21 @@ sub _unfix_shebang {
 
 #-----------------------------------------------------------------------------
 
 
 #-----------------------------------------------------------------------------
 
-1;
+sub _policies_that_cannot_be_disabled {
+    # This is a special list of policies that cannot
+    # be disabled by the "no critic" pseudo-pragma.
+    
+    return qw(
+        Perl::Critic::Policy::Miscellanea::ProhibitUnrestrictedNoCritic
+    );
+}
 
 #-----------------------------------------------------------------------------
 
 
 #-----------------------------------------------------------------------------
 
+1;
+
+
+
 __END__
 
 =pod
 __END__
 
 =pod
index 6960e5e..f3d488b 100644 (file)
@@ -128,12 +128,6 @@ sub prepare_to_scan_document {
 
 #-----------------------------------------------------------------------------
 
 
 #-----------------------------------------------------------------------------
 
-sub can_be_disabled {
-    return $TRUE;
-}
-
-#-----------------------------------------------------------------------------
-
 sub _validate_config_keys {
     my ( $self, $errors, $config ) = @_;
 
 sub _validate_config_keys {
     my ( $self, $errors, $config ) = @_;
 
@@ -737,14 +731,6 @@ overwritten.  Duplicate themes will be removed.
 Appends additional themes to this Policy.  Any existing themes are
 preserved.  Duplicate themes will be removed.
 
 Appends additional themes to this Policy.  Any existing themes are
 preserved.  Duplicate themes will be removed.
 
-=item C< can_be_disabled() >
-
-Returns a true value if this Policy can be disabled by a C<"## no critic">
-marker.  The default method returns true.  Most Policies should never need
-to override this.  But If you want to write a policy that cannot be disabled, 
-override this method to return false.  Note that this only affects the 
-C<"## no critic"> markers -- the Policy can still be disabled via the 
-F<.perlcriticrc> file.
 
 =item C< get_abstract() >
 
 
 =item C< get_abstract() >
 
index 70cbddb..29acd02 100644 (file)
@@ -57,7 +57,6 @@ sub get_trusted_methods {
     return qw(
         new
         initialize_if_enabled
     return qw(
         new
         initialize_if_enabled
-        can_be_disabled
         prepare_to_scan_document
         violates
         applies_to
         prepare_to_scan_document
         violates
         applies_to