#######################################################################
#      $URL: http://perlcritic.tigris.org/svn/perlcritic/trunk/Perl-Critic/TODO $
#     $Date: 2006-05-30 19:18:07 -0700 (Tue, 30 May 2006) $
#   $Author: chrisdolan $
# $Revision: 439 $
########################################################################

NEW FEATURES:

- Report safari sections instead of book page numbers.

BUGS/LIMITATIONS:

- Modules::RequireVersionVar
  - Doesn't enforce three-part versions
- NamingConventions::ProhibitAmbiguousNames
  - Don't allow compound names with forbidden words, like "last_record"
  - Allow forbidden words in RHS of variable declarations
- Subroutines::ProtectPrivateSubs
  - Doesn't forbid $pkg->_foo() because it can't tell the difference
    between that and $self->_foo()

OTHER PBP POLICIES THAT SEEM FEASIBLE TO IMPLEMENT:

- ValuesAndExpressions::ProhibitCommaSeparatedStatements (p68)
- ValuesAndExpressions::RequireListParens (p71)
- ValuesAndExpressions::ProhibitScalarGrep (p71)
  Look for grep in a scalar context and recommend any() instead
- Variables::RequireLocalizedPunctuationVars (p81)
- Variables::RequireNegativeIndices (p88)
- Variables::RequireLexicalForLoopIterator (p108)
- Variables::ProhibitTopicChangeInListFunction (p114)
- Documentation::PodSpelling (p148)
  Base it on Pod::Spell or Test::Spelling
  Add a "=for stopwords" section for words to skip, as per Pod::Spell
- BuiltinFunctions::ProhibitReverseSortBlock (p152)
  Don't allow first instance of $b to be before first instance of $a
- Subroutines::RequireArgUnpacking (p178)
  Ensure that the first child of a sub is PPI::Statement::Variable
- Subroutines::ProhibitManyArgs (p182)
  If first PPI::Statement::Variable is a list "my", make sure is less than N elements
  Otherwise make sure there are less than N PPI::Statement::Variables in a row at begin
- InputOutput::RequireErrorChecking (p208)
  Forbid open, print, close in void context
- InputOutput::RequireBriefOpen (p209)
  Make sure there's a close within N statements of an open, both with same lexical FH
- InputOutput::ProhibitJoinedReadline (p213)
- InputOutput::ProhibitExplicitStdin (p216)
- InputOutput::ProhibitInteractiveTest (p218)
  Forbid -t operand
- Miscellanea::ProhibitObnoxiousComments
  Forbid excessive hash marks e.g. "#### This is a loud comment ####"
  Make the obnoxious pattern configurable
- RegularExpressions::RequireBracesForMultiline (p242)
- RegularExpressions::ProhibitUnusualDelimiters (p246)
- RegularExpressions::ProhibitEscapedMetacharacters (p247)
- RegularExpressions::ProhibitEnumeratedClasses (p248)
  This will be avoided for ASCII-only code
- RegularExpressions::ProhibitUnusedCapture (p252)
  Look for LHS of regexp or use of $1, $2, ... before next regexp
- RegularExpressions::ProhibitCaptureWithoutTest (p253)
  $1, $2, ... must be inside conditional with no preceding regexp
- RegularExpressions::ProhibitComplexRegexps (p261)
  If regexp is longer than N characters/lines, require it be split into qr// pieces
- RegularExpressions::ProhibitSingleCharAlternation (p265)
  Not sure if this is easy or hard.  Need to look at what PPI emits for regexps.
- RegularExpressions::ProhibitFixedStringMatches (p271)
  Can't be qr/\s*\\A\s*\((?:\?:)?(?:\s*\w+\s*\|)*\s*\w+\s*\)\s*\\z/
  or qr/\s*\\A\s*\w+\s*\\z/
- TestingAndDebugging::ProhibitProlongedStrictureOverride (p443)


NON-PBP POLICIES WANTED:

- BuiltInFunctions::RequireConstantSprintfFormat
- BuiltInFunctions::RequireConstantUnpackFormat
  http://home.earthlink.net/~josh.jore/new-warnings/slides/slide1.html
- ControlStructures::ProhibitIncludeViaDo
  Forbid C<do "foo.pl">
  Not sure about this policy name...
- CodingStyle::ProhibitNonASCII
  Definitely low severity!
  Only looks at code, not comments or POD
- Miscellanea::RequireMinimumPerlVersion
  Every module should have something like C<use 5.6.0>
- Miscellanea::Prohibit5006isms
  Keep the code 5.005 compatible
  Low severity
- Variables::ProhibitUseVars
  Require C<our $foo> instead.
  This contradicts Miscellanea::Prohibit5006isms
  Maybe verify C<use 5.6> before applying this policy
  Low severity
- VariablesAndExpressions::ProhibitQuotedHashKeys
  Forbid quotes around hash keys, unless they are really needed.
  Suggested by Adam Kennedy
  Low severity

REFACTORINGS and ENHANCEMENTS:

- Move %FORMATS from `perlcritic` into Perl::Critic::Utils so that
  Test::P::C can use them.  Use a subroutine instead of a package var.
- Alias -verbose to -format option in Test::P::C.  Give it same
  functionality as the -verbose option in `perlcritic`
- Enhance P::C::critique() to accept file names, directories,
  or code strings (as refs) just like `perlcritic` does now.
