Perl::Critic::Utils::PPI - Utility functions for dealing with PPI objects. |
Perl::Critic::Utils::PPI - Utility functions for dealing with PPI objects.
Provides classification of PPI::Elements.
This is considered to be a public module. Any changes to its interface will go through a deprecation cycle.
is_ppi_expression_or_generic_statement( $element )
Expression
.
is_ppi_generic_statement( $element )
is_ppi_statement_subclass( $element )
is_ppi_simple_statement( $element )
is_ppi_constant_element( $element )
This subroutine does not interpret any form of here document as a constant value, and may not until PPI::Token::HereDoc acquires the relevant portions of the PPI::Token::Quote interface.
This subroutine also does not interpret entities created by the Readonly module or the constant pragma as constants, because the infrastructure to detect these appears not to be present, and the author of this subroutine (not Mr. Shank or Mr. Thalhammer) lacks the knowledge/expertise/gumption to put it in place.
is_subroutine_declaration( $element )
is_in_subroutine( $element )
get_constant_name_element_from_declaring_statement($statement)
Given a PPI::Statement, if the statement is a use
constant
or Readonly declaration statement, return the name of
the thing being defined.
Given
use constant 1.16 FOO => 'bar';
this will return ``FOO''. Similarly, given
Readonly::Hash my %FOO => ( bar => 'baz' );
this will return ``%FOO''.
Caveat: in the case where multiple constants are declared using the same
use constant
statement (e.g. use constant { FOO => 1, BAR => 2 };
,
this subroutine will return the declaring
PPI::Structure::Constructor. In the case of
use constant 1.16 { FOO => 1, BAR => 2 };
it may return a
PPI::Structure::Block instead of a
PPI::Structure::Constructor, due to a parse
error in PPI.
get_next_element_in_same_simple_statement( $element )
If the $element is undefined or unblessed, we simply return.
If the $element satisfies is_ppi_simple_statement()
, we return, unless
it has a parent which is a PPI::Structure::List.
If the $element is the last significant element in its PPI::Node, we replace it with its parent and iterate again.
Otherwise, we return $element->snext_sibling()
.
get_previous_module_used_on_same_line( $element )
use
or
require
on the same line as the $element. If none is found, simply returns.
For example, with the line
use version; our $VERSION = ...;
given the PPI::Token::Symbol instance for $VERSION
, this will return
``version''.
If the given element is in a use
or <require>, the return is from the
previous use
or require
on the line, if any.
Elliot Shank <perl@galumph.com>
Copyright (c) 2007-2011 Elliot Shank.
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.
Perl::Critic::Utils::PPI - Utility functions for dealing with PPI objects. |