File::Find::Rule::PPI - Add support for PPI queries to File::Find::Rule


File-Find-Rule-PPI documentation Contained in the File-Find-Rule-PPI distribution.

Index


Code Index:

NAME

Top

File::Find::Rule::PPI - Add support for PPI queries to File::Find::Rule

SYNOPSIS

Top

  use File::Find::Rule      ();
  use File::Find::Rule::PPI ();

  # Find all perl modules that use here-docs
  my $Find = File::Find::Rule->file
                             ->name('*.pm')
                             ->ppi_find_any('Token::HereDoc');
  my @heredoc = $Find->in( $dir );

DESCRIPTION

Top

File::Find::Rule::PPI allows you to integrate PPI content queries into your File::Find::Rule searches.

Initially, it provides the one additional method ppi_find_any, which takes an argument identical to the PPI::Node method find_any and checks each file as a perl document to see if matches the query.

METHODS

Top

ppi_find_any $condition | $PPI::Find

The ppi_find_any method causes a query identical to (and implemented using) PPI::Node's find_any method.

It takes as argument any condition that would also be valid for the above method.

In addition, it can also take as argument an instantiated PPI::Find object, and will use that object's any_matches method to achieve the same effect.

If you provide no or an illegal condition to ppi_find_any, the check will always fail, and no files will be returned when you execute the search.

SUPPORT

Top

Bugs should always be submitted via the CPAN bug tracker

http://rt.cpan.org/NoAuth/ReportBug.html?Queue=File-Find-Rule-PPI

For other issues, contact the maintainer

AUTHOR

Top

Adam Kennedy <adamk@cpan.org>

ACKNOWLEDGMENTS

Top

Funding provided by The Perl Foundation

SEE ALSO

Top

http://ali.as/, File::Find::Rule, PPI

COPYRIGHT

Top


File-Find-Rule-PPI documentation Contained in the File-Find-Rule-PPI distribution.
package File::Find::Rule::PPI;

use 5.005;
use strict;
use Params::Util      0.10 '_INSTANCE';
use File::Find::Rule  0.20 ();
use PPI              1.000 ();

use vars qw{$VERSION @ISA @EXPORT};
BEGIN {
	$VERSION = '1.06';
	@ISA     = 'File::Find::Rule';
	@EXPORT  = @File::Find::Rule::EXPORT;

	# Preload PPI::Find module if needed and possible
	eval "use prefork => 'PPI::Find';";
}





#####################################################################
# Add the methods to File::Find::Rule

sub File::Find::Rule::ppi_find_any {
	require PPI;
	my $self = shift()->_force_object;

	# Is this a PPI::Find object
	if ( _INSTANCE($_[0], 'PPI::Find') ) {
		require PPI::Find;
		my $Find = shift;
		return $self->exec( sub {
				my $Document = PPI::Document->new($_) or return;
				$Find->any_matches                    or return;
				1;
			} );
	}

	# Normal Document->find_any test
	my $condition = PPI::Node->_wanted(shift);

	# If you want to find crap, you never will
	return $self->discard unless $condition;

	# Add the query for a valid condition
	$self->exec( sub {
			my $Document = PPI::Document->new($_) or return;
			$Document->find_any( $condition )      or return;
			1;
		} );
}

1;