Login
Generate P::C::PolicySummary, rather than have to maintain
authorElliot Shank <perl@galumph.com>
Mon, 21 Apr 2008 05:21:18 +0000 (05:21 +0000)
committerElliot Shank <perl@galumph.com>
Mon, 21 Apr 2008 05:21:18 +0000 (05:21 +0000)
it.

Nice that there was already a test in place to make sure
that I got it correct.  :]

.gitignore
Build.PL
Changes
MANIFEST.SKIP
Makefile.PL
inc/Perl/Critic/BuildUtilities.pm
lib/Perl/Critic/PolicyFactory.pm
lib/Perl/Critic/PolicySummary.pod [deleted file]
lib/Perl/Critic/PolicySummary.pod.PL [new file with mode: 0644]

index e4d3eca..68072c0 100644 (file)
@@ -1,4 +1,5 @@
 cover_db
+lib/Perl/Critic/PolicySummary.pod
 t/*_without_optional_dependencies.t
 t/ControlStructures/ProhibitNegativeExpressionsInUnlessAndUntilConditions.run
 t/Variables/RequireLocalizedPunctuationVars.run
index 3688e54..5354b64 100644 (file)
--- a/Build.PL
+++ b/Build.PL
@@ -105,8 +105,10 @@ my $builder = $class->new(
             MANIFEST.bak
             Makefile
             Makefile.old
+            lib/Perl/Critic/PolicySummary.pod
             pm_to_blib
             t/ControlStructures/ProhibitNegativeExpressionsInUnlessAndUntilConditions.run
+            t/Variables/RequireLocalizedPunctuationVars.run
         >,
         test_wrappers_to_generate(),
     ],
diff --git a/Changes b/Changes
index 049c801..2306a75 100644 (file)
--- a/Changes
+++ b/Changes
 
      Policy Changes:
      * Variables::RequireLocalizedPunctuationVars now allows the use of "my".
+
+     http://rt.cpan.org/Ticket/Display.html?id=33937
+
      * RegularExpressions::ProhibitUnusualDelimiters now supports an
        "allow_all_brackets" option.
      * RegularExpressions::RequireBracesForMultiline now supports an
        "allow_all_brackets" option.
 
-     http://rt.cpan.org/Ticket/Display.html?id=33937
-
      New Developer Features:
      * If a document specifies a minimum perl version, e.g. "use 5.008003",
        P::C::Document::highest_explicit_perl_version() will tell you what it
index ca54f5d..b428a20 100644 (file)
@@ -1,5 +1,6 @@
 ^README\.developer$
 \.PPI$
+^lib/Perl/Critic/PolicySummary.pod$
 _without_optional_dependencies.t$
 ^t/ControlStructures/ProhibitNegativeExpressionsInUnlessAndUntilConditions.run$
 ^t/Variables/RequireLocalizedPunctuationVars.run$
index e9b86f0..4d83b37 100644 (file)
@@ -63,8 +63,10 @@ WriteMakefile(
         FILES =>
             join
                 q< >,
+                'lib/Perl/Critic/PolicySummary.pod',
                 test_wrappers_to_generate(),
-                't/ControlStructures/ProhibitNegativeExpressionsInUnlessAndUntilConditions.run'
+                't/ControlStructures/ProhibitNegativeExpressionsInUnlessAndUntilConditions.run',
+                't/Variables/RequireLocalizedPunctuationVars.run',
     },
 );
 
index 24e3133..6f11697 100644 (file)
@@ -84,6 +84,8 @@ sub test_wrappers_to_generate {
 sub get_PL_files {
     my %PL_files;
 
+    $PL_files{'lib/Perl/Critic/PolicySummary.pod.PL'} =
+        'lib/Perl/Critic/PolicySummary.pod';
     $PL_files{'t/ControlStructures/ProhibitNegativeExpressionsInUnlessAndUntilConditions.run.PL'} =
         't/ControlStructures/ProhibitNegativeExpressionsInUnlessAndUntilConditions.run';
     $PL_files{'t/Variables/RequireLocalizedPunctuationVars.run.PL'} =
index 6cf127f..824bb4d 100644 (file)
@@ -43,6 +43,8 @@ my @SITE_POLICY_NAMES = ();
 
 #-----------------------------------------------------------------------------
 
+# Blech!!!  This is ug-lee.  Belongs in the constructor.  And it shouldn't be
+# called "test" mode.
 sub import {
 
     my ( $class, %args ) = @_;
diff --git a/lib/Perl/Critic/PolicySummary.pod b/lib/Perl/Critic/PolicySummary.pod
deleted file mode 100644 (file)
index d90f36c..0000000
+++ /dev/null
@@ -1,555 +0,0 @@
-##############################################################################
-#      $URL$
-#     $Date$
-#   $Author$
-# $Revision$
-##############################################################################
-
-=for stopwords metachars
-
-=head1 NAME
-
-Perl::Critic::PolicySummary - Descriptions of the Policy modules included with L<Perl::Critic> itself.
-
-
-=head1 DESCRIPTION
-
-The following Policy modules are distributed with Perl::Critic.
-(There are additional Policies that can be found in add-on
-distributions.)  The Policy modules have been categorized according to
-the table of contents in Damian Conway's book B<Perl Best Practices>.
-Since most coding standards take the form "do this..." or "don't do
-that...", I have adopted the convention of naming each module
-C<RequireSomething> or C<ProhibitSomething>.  Each Policy is listed
-here with its default severity.  If you don't agree with the default
-severity, you can change it in your F<.perlcriticrc> file.  See the
-documentation of each module for its specific details.
-
-
-=head1 POLICIES
-
-=head2 L<Perl::Critic::Policy::BuiltinFunctions::ProhibitBooleanGrep>
-
-Use C<List::MoreUtils::any> instead of C<grep> in boolean context. [Severity 2]
-
-=head2 L<Perl::Critic::Policy::BuiltinFunctions::ProhibitComplexMappings>
-
-Map blocks should have a single statement. [Severity 3]
-
-=head2 L<Perl::Critic::Policy::BuiltinFunctions::ProhibitLvalueSubstr>
-
-Use 4-argument C<substr> instead of writing C<substr($foo, 2, 6) = $bar>. [Severity 3]
-
-=head2 L<Perl::Critic::Policy::BuiltinFunctions::ProhibitReverseSortBlock>
-
-Forbid $b before $a in sort blocks. [Severity 1]
-
-=head2 L<Perl::Critic::Policy::BuiltinFunctions::ProhibitSleepViaSelect>
-
-Use L<Time::HiRes> instead of something like C<select(undef, undef, undef, .05)>. [Severity 5]
-
-=head2 L<Perl::Critic::Policy::BuiltinFunctions::ProhibitStringyEval>
-
-Write C<eval { my $foo; bar($foo) }> instead of C<eval "my $foo; bar($foo);">. [Severity 5]
-
-=head2 L<Perl::Critic::Policy::BuiltinFunctions::ProhibitStringySplit>
-
-Write C<split /-/, $string> instead of C<split '-', $string>. [Severity 2]
-
-=head2 L<Perl::Critic::Policy::BuiltinFunctions::ProhibitUniversalCan>
-
-Write C<< eval { $foo->can($name) } >> instead of C<UNIVERSAL::can($foo, $name)>. [Severity 3]
-
-=head2 L<Perl::Critic::Policy::BuiltinFunctions::ProhibitUniversalIsa>
-
-Write C<< eval { $foo->isa($pkg) } >> instead of C<UNIVERSAL::isa($foo, $pkg)>. [Severity 3]
-
-=head2 L<Perl::Critic::Policy::BuiltinFunctions::ProhibitVoidGrep>
-
-Don't use C<grep> in void contexts. [Severity 3]
-
-=head2 L<Perl::Critic::Policy::BuiltinFunctions::ProhibitVoidMap>
-
-Don't use C<map> in void contexts. [Severity 3]
-
-=head2 L<Perl::Critic::Policy::BuiltinFunctions::RequireBlockGrep>
-
-Write C<grep { $_ =~ /$pattern/ } @list> instead of C<grep /$pattern/, @list>. [Severity 4]
-
-=head2 L<Perl::Critic::Policy::BuiltinFunctions::RequireBlockMap>
-
-Write C<map { $_ =~ /$pattern/ } @list> instead of C<map /$pattern/, @list>. [Severity 4]
-
-=head2 L<Perl::Critic::Policy::BuiltinFunctions::RequireGlobFunction>
-
-Use C<glob q{*}> instead of <*>. [Severity 5]
-
-=head2 L<Perl::Critic::Policy::BuiltinFunctions::RequireSimpleSortBlock>
-
-Sort blocks should have a single statement. [Severity 3]
-
-=head2 L<Perl::Critic::Policy::ClassHierarchies::ProhibitAutoloading>
-
-AUTOLOAD methods should be avoided. [Severity 3]
-
-=head2 L<Perl::Critic::Policy::ClassHierarchies::ProhibitExplicitISA>
-
-Employ C<use base> instead of C<@ISA>. [Severity 3]
-
-=head2 L<Perl::Critic::Policy::ClassHierarchies::ProhibitOneArgBless>
-
-Write C<bless {}, $class;> instead of just C<bless {};>. [Severity 5]
-
-=head2 L<Perl::Critic::Policy::CodeLayout::ProhibitHardTabs>
-
-Use spaces instead of tabs. [Severity 3]
-
-=head2 L<Perl::Critic::Policy::CodeLayout::ProhibitParensWithBuiltins>
-
-Write C<open $handle, $path> instead of C<open($handle, $path)>. [Severity 1]
-
-=head2 L<Perl::Critic::Policy::CodeLayout::ProhibitQuotedWordLists>
-
-Write C<qw(foo bar baz)> instead of C<('foo', 'bar', 'baz')>. [Severity 2]
-
-=head2 L<Perl::Critic::Policy::CodeLayout::ProhibitTrailingWhitespace>
-
-Don't use whitespace at the end of lines. [Severity 1]
-
-=head2 L<Perl::Critic::Policy::CodeLayout::RequireConsistentNewlines>
-
-Use the same newline through the source. [Severity 4]
-
-=head2 L<Perl::Critic::Policy::CodeLayout::RequireTidyCode>
-
-Must run code through L<perltidy>. [Severity 1]
-
-=head2 L<Perl::Critic::Policy::CodeLayout::RequireTrailingCommas>
-
-Put a comma at the end of every multi-line list declaration, including the last one. [Severity 1]
-
-=head2 L<Perl::Critic::Policy::ControlStructures::ProhibitCStyleForLoops>
-
-Write C<for(0..20)> instead of C<for($i=0; $i<=20; $i++)>. [Severity 2]
-
-=head2 L<Perl::Critic::Policy::ControlStructures::ProhibitCascadingIfElse>
-
-Don't write long "if-elsif-elsif-elsif-elsif...else" chains. [Severity 3]
-
-=head2 L<Perl::Critic::Policy::ControlStructures::ProhibitDeepNests>
-
-Don't write deeply nested loops and conditionals. [Severity 3]
-
-=head2 L<Perl::Critic::Policy::ControlStructures::ProhibitMutatingListFunctions>
-
-Don't modify C<$_> in list functions. [Severity 5]
-
-=head2 L<Perl::Critic::Policy::ControlStructures::ProhibitNegativeExpressionsInUnlessAndUntilConditions>
-
-Don't use operators like C<not>, C<!~>, and C<le> within C<until> and C<unless>. [Severity 3]
-
-=head2 L<Perl::Critic::Policy::ControlStructures::ProhibitPostfixControls>
-
-Write C<if($condition){ do_something() }> instead of C<do_something() if $condition>. [Severity 2]
-
-=head2 L<Perl::Critic::Policy::ControlStructures::ProhibitUnlessBlocks>
-
-Write C<if(! $condition)> instead of C<unless($condition)>. [Severity 2]
-
-=head2 L<Perl::Critic::Policy::ControlStructures::ProhibitUnreachableCode>
-
-Don't write code after an unconditional C<die, exit, or next>. [Severity 4]
-
-=head2 L<Perl::Critic::Policy::ControlStructures::ProhibitUntilBlocks>
-
-Write C<while(! $condition)> instead of C<until($condition)>. [Severity 2]
-
-=head2 L<Perl::Critic::Policy::Documentation::PodSpelling>
-
-Check your spelling. [Severity 1]
-
-=head2 L<Perl::Critic::Policy::Documentation::RequirePodAtEnd>
-
-All POD should be after C<__END__>. [Severity 1]
-
-=head2 L<Perl::Critic::Policy::Documentation::RequirePodSections>
-
-Organize your POD into the customary sections. [Severity 2]
-
-=head2 L<Perl::Critic::Policy::ErrorHandling::RequireCarping>
-
-Use functions from L<Carp> instead of C<warn> or C<die>. [Severity 3]
-
-=head2 L<Perl::Critic::Policy::InputOutput::ProhibitBacktickOperators>
-
-Discourage stuff like C<@files = `ls $directory`>. [Severity 3]
-
-=head2 L<Perl::Critic::Policy::InputOutput::ProhibitBarewordFileHandles>
-
-Write C<open my $fh, q{<}, $filename;> instead of C<open FH, q{<}, $filename;>. [Severity 5]
-
-=head2 L<Perl::Critic::Policy::InputOutput::ProhibitExplicitStdin>
-
-Use "<>" or "<ARGV>" or a prompting module instead of "<STDIN>". [Severity 4]
-
-=head2 L<Perl::Critic::Policy::InputOutput::ProhibitInteractiveTest>
-
-Use prompt() instead of -t. [Severity 5]
-
-=head2 L<Perl::Critic::Policy::InputOutput::ProhibitJoinedReadline>
-
-Use "local $/ = undef" or File::Slurp instead of joined readline. [Severity 3]
-
-=head2 L<Perl::Critic::Policy::InputOutput::ProhibitOneArgSelect>
-
-Never write C<select($fh)>. [Severity 4]
-
-=head2 L<Perl::Critic::Policy::InputOutput::ProhibitReadlineInForLoop>
-
-Write C<< while( $line = <> ){...} >> instead of C<< for(<>){...} >>. [Severity 4]
-
-=head2 L<Perl::Critic::Policy::InputOutput::ProhibitTwoArgOpen>
-
-Write C<< open $fh, q{<}, $filename; >> instead of C<< open $fh, "<$filename"; >>. [Severity 5]
-
-=head2 L<Perl::Critic::Policy::InputOutput::RequireBracedFileHandleWithPrint>
-
-Write C<print {$FH} $foo, $bar;> instead of C<print $FH $foo, $bar;>. [Severity 1]
-
-=head2 L<Perl::Critic::Policy::InputOutput::RequireBriefOpen>
-
-Close filehandles as soon as possible after opening them. [Severity 4]
-
-=head2 L<Perl::Critic::Policy::InputOutput::RequireCheckedClose>
-
-Write C<< my $error = close $fh; >> instead of C<< close $fh; >>. [Severity 2]
-
-=head2 L<Perl::Critic::Policy::InputOutput::RequireCheckedOpen>
-
-Write C<< my $error = open $fh, $mode, $filename; >> instead of C<< open $fh, $mode, $filename; >>. [Severity 3]
-
-=head2 L<Perl::Critic::Policy::InputOutput::RequireCheckedSyscalls>
-
-Return value of flagged function ignored. [Severity 1]
-
-=head2 L<Perl::Critic::Policy::Miscellanea::ProhibitFormats>
-
-Do not use C<format>. [Severity 3]
-
-=head2 L<Perl::Critic::Policy::Miscellanea::ProhibitTies>
-
-Do not use C<tie>. [Severity 2]
-
-=head2 L<Perl::Critic::Policy::Miscellanea::RequireRcsKeywords>
-
-Put source-control keywords in every file. [Severity 2]
-
-=head2 L<Perl::Critic::Policy::Modules::ProhibitAutomaticExportation>
-
-Export symbols via C<@EXPORT_OK> or C<%EXPORT_TAGS> instead of C<@EXPORT>. [Severity 4]
-
-=head2 L<Perl::Critic::Policy::Modules::ProhibitEvilModules>
-
-Ban modules that aren't blessed by your shop. [Severity 5]
-
-=head2 L<Perl::Critic::Policy::Modules::ProhibitExcessMainComplexity>
-
-Minimize complexity in code that is B<outside> of subroutines. [Severity 3]
-
-=head2 L<Perl::Critic::Policy::Modules::ProhibitMultiplePackages>
-
-Put packages (especially subclasses) in separate files. [Severity 4]
-
-=head2 L<Perl::Critic::Policy::Modules::RequireBarewordIncludes>
-
-Write C<require Module> instead of C<require 'Module.pm'>. [Severity 5]
-
-=head2 L<Perl::Critic::Policy::Modules::RequireEndWithOne>
-
-End each module with an explicitly C<1;> instead of some funky expression. [Severity 4]
-
-=head2 L<Perl::Critic::Policy::Modules::RequireExplicitPackage>
-
-Always make the C<package> explicit. [Severity 4]
-
-=head2 L<Perl::Critic::Policy::Modules::RequireFilenameMatchesPackage>
-
-Package declaration must match filename. [Severity 5]
-
-=head2 L<Perl::Critic::Policy::Modules::RequireNoMatchVarsWithUseEnglish>
-
-C<use English> must be passed a C<-no_match_vars> argument. [Severity 2]
-
-=head2 L<Perl::Critic::Policy::Modules::RequireVersionVar>
-
-Give every module a C<$VERSION> number. [Severity 2]
-
-=head2 L<Perl::Critic::Policy::NamingConventions::ProhibitAmbiguousNames>
-
-Don't use vague variable or subroutine names like 'last' or 'record'. [Severity 3]
-
-=head2 L<Perl::Critic::Policy::NamingConventions::ProhibitMixedCaseSubs>
-
-Write C<sub my_function{}> instead of C<sub MyFunction{}>. [Severity 1]
-
-=head2 L<Perl::Critic::Policy::NamingConventions::ProhibitMixedCaseVars>
-
-Write C<$my_variable = 42> instead of C<$MyVariable = 42>. [Severity 1]
-
-=head2 L<Perl::Critic::Policy::References::ProhibitDoubleSigils>
-
-Write C<@{ $array_ref }> instead of C<@$array_ref>. [Severity 2]
-
-=head2 L<Perl::Critic::Policy::RegularExpressions::ProhibitCaptureWithoutTest>
-
-Capture variable used outside conditional. [Severity 3]
-
-=head2 L<Perl::Critic::Policy::RegularExpressions::ProhibitComplexRegexes>
-
-Split long regexps into smaller C<qr//> chunks. [Severity 3]
-
-=head2 L<Perl::Critic::Policy::RegularExpressions::ProhibitEnumeratedClasses>
-
-Use named character classes instead of explicit character lists. [Severity 1]
-
-=head2 L<Perl::Critic::Policy::RegularExpressions::ProhibitEscapedMetacharacters>
-
-Use character classes for literal metachars instead of escapes. [Severity 1]
-
-=head2 L<Perl::Critic::Policy::RegularExpressions::ProhibitFixedStringMatches>
-
-Use C<eq> or hash instead of fixed-pattern regexps. [Severity 2]
-
-=head2 L<Perl::Critic::Policy::RegularExpressions::ProhibitSingleCharAlternation>
-
-Use C<[abc]> instead of C<a|b|c>. [Severity 1]
-
-=head2 L<Perl::Critic::Policy::RegularExpressions::ProhibitUnusedCapture>
-
-Only use a capturing group if you plan to use the captured value. [Severity 3]
-
-=head2 L<Perl::Critic::Policy::RegularExpressions::ProhibitUnusualDelimiters>
-
-Use only C<//> or C<{}> to delimit regexps. [Severity 1]
-
-=head2 L<Perl::Critic::Policy::RegularExpressions::RequireBracesForMultiline>
-
-Use C<{> and C<}> to delimit multi-line regexps. [Severity 1]
-
-=head2 L<Perl::Critic::Policy::RegularExpressions::RequireExtendedFormatting>
-
-Always use the C</x> modifier with regular expressions. [Severity 3]
-
-=head2 L<Perl::Critic::Policy::RegularExpressions::RequireLineBoundaryMatching>
-
-Always use the C</m> modifier with regular expressions. [Severity 2]
-
-=head2 L<Perl::Critic::Policy::Subroutines::ProhibitAmpersandSigils>
-
-Don't call functions with a leading ampersand sigil. [Severity 2]
-
-=head2 L<Perl::Critic::Policy::Subroutines::ProhibitBuiltinHomonyms>
-
-Don't declare your own C<open> function. [Severity 4]
-
-=head2 L<Perl::Critic::Policy::Subroutines::ProhibitExcessComplexity>
-
-Minimize complexity by factoring code into smaller subroutines. [Severity 3]
-
-=head2 L<Perl::Critic::Policy::Subroutines::ProhibitExplicitReturnUndef>
-
-Return failure with bare C<return> instead of C<return undef>. [Severity 5]
-
-=head2 L<Perl::Critic::Policy::Subroutines::ProhibitNestedSubs>
-
-C<sub never { sub correct {} }>. [Severity 5]
-
-=head2 L<Perl::Critic::Policy::Subroutines::ProhibitManyArgs>
-
-Too many arguments. [Severity 3]
-
-=head2 L<Perl::Critic::Policy::Subroutines::ProhibitSubroutinePrototypes>
-
-Don't write C<sub my_function (@@) {}>. [Severity 5]
-
-=head2 L<Perl::Critic::Policy::Subroutines::ProtectPrivateSubs>
-
-Prevent access to private subs in other packages. [Severity 3]
-
-=head2 L<Perl::Critic::Policy::Subroutines::RequireArgUnpacking>
-
-Always unpack C<@_> first. [Severity 4]
-
-=head2 L<Perl::Critic::Policy::Subroutines::RequireFinalReturn>
-
-End every path through a subroutine with an explicit C<return> statement. [Severity 4]
-
-=head2 L<Perl::Critic::Policy::TestingAndDebugging::ProhibitNoStrict>
-
-Prohibit various flavors of C<no strict>. [Severity 5]
-
-=head2 L<Perl::Critic::Policy::TestingAndDebugging::ProhibitNoWarnings>
-
-Prohibit various flavors of C<no warnings>. [Severity 4]
-
-=head2 L<Perl::Critic::Policy::TestingAndDebugging::ProhibitProlongedStrictureOverride>
-
-Don't turn off strict for large blocks of code. [Severity 4]
-
-=head2 L<Perl::Critic::Policy::TestingAndDebugging::RequireTestLabels>
-
-Tests should all have labels. [Severity 3]
-
-=head2 L<Perl::Critic::Policy::TestingAndDebugging::RequireUseStrict>
-
-Always C<use strict>. [Severity 5]
-
-=head2 L<Perl::Critic::Policy::TestingAndDebugging::RequireUseWarnings>
-
-Always C<use warnings>. [Severity 4]
-
-=head2 L<Perl::Critic::Policy::ValuesAndExpressions::ProhibitCommaSeparatedStatements>
-
-Don't use the comma operator as a statement separator. [Severity 4]
-
-=head2 L<Perl::Critic::Policy::ValuesAndExpressions::ProhibitConstantPragma>
-
-Don't C<< use constant $FOO => 15 >>. [Severity 4]
-
-=head2 L<Perl::Critic::Policy::ValuesAndExpressions::ProhibitEmptyQuotes>
-
-Write C<q{}> instead of C<''>. [Severity 2]
-
-=head2 L<Perl::Critic::Policy::ValuesAndExpressions::ProhibitEscapedCharacters>
-
-Write C<"\N{DELETE}"> instead of C<"\x7F">, etc. [Severity 2]
-
-=head2 L<Perl::Critic::Policy::ValuesAndExpressions::ProhibitImplicitNewlines>
-
-Use concatenation or HEREDOCs instead of literal line breaks in strings. [Severity 3]
-
-=head2 L<Perl::Critic::Policy::ValuesAndExpressions::ProhibitInterpolationOfLiterals>
-
-Always use single quotes for literal strings. [Severity 1]
-
-=head2 L<Perl::Critic::Policy::ValuesAndExpressions::ProhibitLeadingZeros>
-
-Write C<oct(755)> instead of C<0755>. [Severity 5]
-
-=head2 L<Perl::Critic::Policy::ValuesAndExpressions::ProhibitLongChainsOfMethodCalls>
-
-Long chains of method calls indicate tightly coupled code. [Severity 2]
-
-=head2 L<Perl::Critic::Policy::ValuesAndExpressions::ProhibitMagicNumbers>
-
-Don't mix numeric operators with string operands, or vice-versa. [Severity 2]
-
-=head2 L<Perl::Critic::Policy::ValuesAndExpressions::ProhibitMismatchedOperators>
-
-Don't mix numeric operators with string operands, or vice-versa. [Severity 3]
-
-=head2 L<Perl::Critic::Policy::ValuesAndExpressions::ProhibitMixedBooleanOperators>
-
-Write C< !$foo && $bar || $baz > instead of C< not $foo && $bar or $baz>. [Severity 4]
-
-=head2 L<Perl::Critic::Policy::ValuesAndExpressions::ProhibitNoisyQuotes>
-
-Use C<q{}> or C<qq{}> instead of quotes for awkward-looking strings. [Severity 2]
-
-=head2 L<Perl::Critic::Policy::ValuesAndExpressions::ProhibitQuotesAsQuotelikeOperatorDelimiters>
-
-Don't use quotes (C<'>, C<">, C<`>) as delimiters for the quote-like operators. [Severity 3]
-
-=head2 L<Perl::Critic::Policy::ValuesAndExpressions::ProhibitVersionStrings>
-
-Don't use strings like C<v1.4> or C<1.4.5> when including other modules. [Severity 3]
-
-=head2 L<Perl::Critic::Policy::ValuesAndExpressions::RequireInterpolationOfMetachars>
-
-Warns that you might have used single quotes when you really wanted double-quotes. [Severity 1]
-
-=head2 L<Perl::Critic::Policy::ValuesAndExpressions::RequireNumberSeparators>
-
-Write C< 141_234_397.0145 > instead of C< 141234397.0145 >. [Severity 2]
-
-=head2 L<Perl::Critic::Policy::ValuesAndExpressions::RequireQuotedHeredocTerminator>
-
-Write C< print <<'THE_END' > or C< print <<"THE_END" >. [Severity 3]
-
-=head2 L<Perl::Critic::Policy::ValuesAndExpressions::RequireUpperCaseHeredocTerminator>
-
-Write C< <<'THE_END'; > instead of C< <<'theEnd'; >. [Severity 2]
-
-=head2 L<Perl::Critic::Policy::Variables::ProhibitConditionalDeclarations>
-
-Do not write C< my $foo = $bar if $baz; >. [Severity 5]
-
-=head2 L<Perl::Critic::Policy::Variables::ProhibitLocalVars>
-
-Use C<my> instead of C<local>, except when you have to. [Severity 2]
-
-=head2 L<Perl::Critic::Policy::Variables::ProhibitMatchVars>
-
-Avoid C<$`>, C<$&>, C<$'> and their English equivalents. [Severity 4]
-
-=head2 L<Perl::Critic::Policy::Variables::ProhibitPackageVars>
-
-Eliminate globals declared with C<our> or C<use vars>. [Severity 3]
-
-=head2 L<Perl::Critic::Policy::Variables::ProhibitPerl4PackageNames>
-
-Use double colon (::) to separate package name components instead of single quotes ('). [Severity 2]
-
-=head2 L<Perl::Critic::Policy::Variables::ProhibitPunctuationVars>
-
-Write C<$EVAL_ERROR> instead of C<$@>. [Severity 2]
-
-=head2 L<Perl::Critic::Policy::Variables::ProtectPrivateVars>
-
-Prevent access to private vars in other packages. [Severity 3]
-
-=head2 L<Perl::Critic::Policy::Variables::RequireInitializationForLocalVars>
-
-Write C<local $foo = $bar;> instead of just C<local $foo;>. [Severity 3]
-
-=head2 L<Perl::Critic::Policy::Variables::RequireLexicalLoopIterators>
-
-Write C<for my $element (@list) {...}> instead of C<for $element (@list) {...}>. [Severity 5]
-
-=head2 L<Perl::Critic::Policy::Variables::RequireLocalizedPunctuationVars>
-
-Magic variables should be assigned as "local". [Severity 4]
-
-=head2 L<Perl::Critic::Policy::Variables::RequireNegativeIndices>
-
-Negative array index should be used. [Severity 4]
-
-
-=head1 VERSION
-
-This is part of L<Perl::Critic> version 1.083_001.
-
-
-=head1 AUTHOR
-
-Jeffrey Ryan Thalhammer <thaljef@cpan.org>
-
-=head1 COPYRIGHT
-
-Copyright (c) 2005-2008 Jeffrey Ryan Thalhammer.  All rights reserved.
-
-This program is free software; you can redistribute it and/or modify
-it under the same terms as Perl itself.  The full text of this license
-can be found in the LICENSE file included with this module.
-
-=cut
-
-##############################################################################
-# Local Variables:
-#   mode: cperl
-#   cperl-indent-level: 4
-#   fill-column: 78
-#   indent-tabs-mode: nil
-#   c-indentation-style: bsd
-# End:
-# ex: set ts=8 sts=4 sw=4 tw=78 ft=pod expandtab shiftround :
diff --git a/lib/Perl/Critic/PolicySummary.pod.PL b/lib/Perl/Critic/PolicySummary.pod.PL
new file mode 100644 (file)
index 0000000..76f6b20
--- /dev/null
@@ -0,0 +1,128 @@
+#!perl  ## no critic (PodSpelling)
+##############################################################################
+#      $URL$
+#     $Date$
+#   $Author$
+# $Revision$
+##############################################################################
+
+# TODO: The "no critic" above is due to PodSpelling not being able to tell
+# that there is no POD in this program.
+
+
+use 5.006;
+use strict;
+use warnings;
+
+use English qw< -no_match_vars >;
+use Carp qw< confess >;
+
+use lib 'lib';
+
+use Perl::Critic::Config;
+use Perl::Critic::PolicyFactory (-test => 1);
+use Perl::Critic::Utils qw< :characters >;
+use Perl::Critic::Utils::POD qw< get_module_abstract_from_file >;
+
+our $VERSION = '1.083_001';
+
+
+print "\n\nGenerating Perl::Critic::PolicySummary.\n";
+
+
+my $configuration =
+    Perl::Critic::Config->new(
+        -profile => $EMPTY,
+        -severity => 1,
+        -theme => 'core',
+    );
+my @policies = $configuration->policies();
+
+
+my $policy_summary = 'lib/Perl/Critic/PolicySummary.pod';
+
+## no critic (RequireBriefOpen)
+open my $pod_file, '>', $policy_summary
+    or confess "Could not open $policy_summary: $ERRNO";
+
+print {$pod_file} <<'END_HEADER';
+=head1 NAME
+
+Perl::Critic::PolicySummary - Descriptions of the Policy modules included with L<Perl::Critic> itself.
+
+
+=head1 DESCRIPTION
+
+The following Policy modules are distributed with Perl::Critic.
+(There are additional Policies that can be found in add-on
+distributions.)  The Policy modules have been categorized according to
+the table of contents in Damian Conway's book B<Perl Best Practices>.
+Since most coding standards take the form "do this..." or "don't do
+that...", I have adopted the convention of naming each module
+C<RequireSomething> or C<ProhibitSomething>.  Each Policy is listed
+here with its default severity.  If you don't agree with the default
+severity, you can change it in your F<.perlcriticrc> file.  See the
+documentation of each module for its specific details.
+
+
+=head1 POLICIES
+
+END_HEADER
+
+
+my $format = <<'END_POLICY';
+=head2 L<%s>
+
+%s [Severity %d]
+
+END_POLICY
+
+foreach my $policy (@policies) {
+    my $source_file = $policy->_get_source_file();
+    my $module_abstract = get_module_abstract_from_file( $source_file );
+
+    printf
+        {$pod_file}
+        $format,
+        $policy->get_long_name(), $module_abstract, $policy->default_severity();
+}
+
+
+print {$pod_file} <<'END_FOOTER';
+
+=head1 VERSION
+
+This is part of L<Perl::Critic> version 1.083_001.
+
+
+=head1 AUTHOR
+
+Jeffrey Ryan Thalhammer <thaljef@cpan.org>
+
+=head1 COPYRIGHT
+
+Copyright (c) 2005-2008 Jeffrey Ryan Thalhammer.  All rights reserved.
+
+This program is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself.  The full text of this license
+can be found in the LICENSE file included with this module.
+
+=cut
+END_FOOTER
+
+
+close $pod_file or confess "Could not close $policy_summary: $ERRNO";
+
+
+print "Done.\n\n";
+
+
+##############################################################################
+# Local Variables:
+#   mode: cperl
+#   cperl-indent-level: 4
+#   fill-column: 78
+#   indent-tabs-mode: nil
+#   c-indentation-style: bsd
+# End:
+# ex: set ts=8 sts=4 sw=4 tw=78 ft=perl expandtab shiftround :