cpan Perl-Critic 1.108

latest releases: 1.152, 1.150, 1.148...
13 years ago

[Dedication]

  • This is the "Give Shawn Moore what we promised him a year ago and hurry
    up and get this out before Brad Oaks gives his YAPC::NA talk" release.

[New Policies]

  • Documentation::RequirePodLinksIncludeText
  • Subroutines::ProhibitUnusedPrivateSubroutines

[New Features]

  • There is a new global configuration item, 'program-extensions', which
    configures Perl::Critic's idea of which file name extensions represent
    programs. The desired extensions are specified as a space-separated list,
    with leading '.' on each if that is desired. Files whose names end in
    '.PL' will always be considered programs. This can be overridden by
    command option --programs-extensions, which can be specified multiple
    times.
  • There is now a perlcritic --allow-unsafe switch. Without this switch,
    Perl::Critic will silently refuse to load any Policy that is marked
    unsafe. Unsafe Policies are usually ones that may compile or execute
    untrusted code (see Perl::Critic::DynamicPolicy for an example); Policy
    authors can mark their policies as unsafe by overriding the is_safe()
    method.
  • The framework that we use to test Perl::Critic Policies has been
    packaged into a convenient module that you can use to test your own
    Policies. See Test::Perl::Critic::Policy and Perl::Critic::TestUtils
    for details.

[Policy Changes]

  • BuiltInFunctions::ProhibitLvalueSubstr no longer complains when there
    is a low-precedence operator between the substr() and the assignment
    operator.
  • CodeLayout::ProhibitParensWithBuiltins now allows 'state ($foo)'. RT
    #52029
  • ErrorHandling::RequireCarping now has an
    allow_in_main_if_not_in_subroutine option to allow "die" directly in
    the default namespace.
  • InputOutput::RequireBriefOpen now recognizes CORE::open(),
    CORE::close(), CORE::GLOBAL::open(), and CORE::GLOBAL::close(). RT
    #52391
  • Modules::ProhibitEvilModules now complains by default about the modules
    deprecated by the Perl 5 Porters in 5.12.
  • Modules::RequireVersionVar documentation updated to make clear that "my
    $VERSION" does not work as a module version declaration. RT #56667
  • The RegularExpressions::* policies have been converted from using
    Regexp::Parser to using PPIx::Regexp for their heavy lifting.
  • RegularExpressions::ProhibitCaptureWithoutTest now allows capture
    variables inside when() {}. RT #36081.
  • RegularExpressions::ProhibitUnusedCapture now checks for unused named
    captures.
  • Subroutines::ProhibitManyArgs revised to count only characters in the
    prototype that represent arguments. RT #56627
  • Subroutines::ProhibitNestedSubs no longer complains about scheduled
    blocks (BEGIN, etc.) inside subroutines and vice versa.
  • Subroutines::RequireFinalReturn should now understand a final given/when
    statement, and declare an error if there is no 'default' block or if any
    branch does not return.
  • TestingAndDebugging::RequireUseStrict now accepts 'use 5.011' or greater
    as equivalent to 'use strict'.
  • ValuesAndExpressions::ProhibitMismatchedOperators false positive with
    "'foo' x 15 . 'bar'". RT #54524
  • Variables::ProhibitPunctuationVars gave false positives on qr// regexp's
    ending in '$'. RT #55604

[Bug Fixes]

  • The "## no critic" annotations now respect #line directives.
  • Annotations on statements spanning more than one line (e.g.
    my $foo =
    '$bar'; ## no critic (RequireInterpolationOfMetachars)
    ) are now handled as single-line annotations, not block annotations.
  • All instances of L in the POD have been changed to L.
    L and L were allowed to stand. RT #37485
  • Spaces are now allowed immediately inside the enclosing parentheses in
    "## no critic ( Foo )". RT #52038
  • With the introduction of PPIx::Regexp, Perl::Critic no longer dies
    when it encounters a Perl 5.010 regexp. RT #49442.
  • DEVELOPER.pod typo in link to
    ValuesAndExpressions::ProhibitConstantPragma policy. RT #57818
  • Spelling errors in documentation. RT #57375
  • "die" used instead of "croak". RT #56619
  • Fixed regex test that caused test failures on every Perl 5.11
    (credit Tom Wyant).
  • t/20_policy_pod_spelling.t now works (or at least no longer fails)
    in non-English locales (again). RT #43291 and RT #48986.
  • Perldoc has broken link for McCabe score definition. RT #53219
  • RT #33935 and #49679 were fixed by upgrading to PPI 1.208

[Other Changes]

  • Perl::Critic::Utils::is_unchecked_call() updated to include chmod in the
    set of things covered by autodie (this happened in autodie v2.08). The
    primary effect of this is on InputOutput::RequireCheckedSyscalls.
  • Now depends upon Task::Weaken to ensure that we only install with perls
    where Scalar::Util::weaken() works.
  • Email::Address was optional, but is now required. So everyone
    gets the optimal behavior from RequireInterpolationOfMetachars.
  • Some infrastructure has been extracted to the new PPIx-Utilities
    distro. It is also a required dependency here. Over time a good
    portion of Perl::Critic::Utils* will be migrated to this distribution.
  • Perl::Critic::Utils::PPI::get_constant_name_element_from_declaring_statement()
    is deprecated because it doesn't handle multiple constants being
    declared within a single "use constant" statement. Use
    PPIx::Utilities::Statement::get_constant_name_elements_from_declaring_statement()
    instead.
  • Removed all uses of Perl::Critic::Utils::PPIRegep. Since the
    PPIx::Regexp update, Perl::Critic only used get_match_string() and
    friends, which were superseded by the corresponding PPI methods.
    Perl::Critic now depends on PPI-1.208 or newer.
  • Moved Perl::Critic::Utils::PPIRegexp to the Perl-Critic-Deprecated.
  • The PolicySummary.pod file is now generated when the distribution
    is created, rather than when you install it. This ensures the file
    will be available on http://search.cpan.org. Thanks to Bear Longyear
    for bringing this to our attention.

Don't miss a new Perl-Critic release

NewReleases is sending notifications on new releases.