package Perl::Critic::Policy::CodeLayout::ProhibitDuplicateCoda; # Copyright (C) 2006-2007, Parrot Foundation. use strict; use warnings; use Perl::Critic::Utils; use Perl::Critic::Violation; use base 'Perl::Critic::Policy'; =head1 NAME Perl::Critic::Policy::CodeLayout::ProhibitDuplicateCoda =head1 DESCRIPTION Prohibit duplicate Parrot coda declarations. =cut our $VERSION = '0.1'; $VERSION = eval $VERSION; ## no critic my $desc = q{Found duplicate coda}; my $expl = q{One should not have more than one Parrot coda declaration per file}; #---------------------------------------------------------------------------- sub default_severity { return $SEVERITY_LOW } sub applies_to { return 'PPI::Document' } #---------------------------------------------------------------------------- sub violates { my ( $self, $elem, $doc ) = @_; # search all comment nodes which match 'vim:' or 'Local Variables:' my $vim_count = 0; my $emacs_count = 0; for ( my $node = $doc->first_element ; $node ; $node = $node->next_sibling ) { if ( $node->isa('PPI::Token::Comment') ) { $vim_count += grep /vim:/, $node; $emacs_count += grep /Local Variables:/, $node; return $self->violation( $desc, $expl, $node || $doc ) if ( $vim_count > 1 or $emacs_count > 1 ); } else { next; } } # we made it the whole way through, return success return; } 1; # Local Variables: # mode: cperl # cperl-indent-level: 4 # fill-column: 100 # End: # vim: expandtab shiftwidth=4: