Perl::Critic::Document - Caching wrapper around PPI::Document



NAME

Perl::Critic::Document - Caching wrapper around PPI::Document


SYNOPSIS

    use PPI::Document;
    use Perl::Critic::Document;
    my $doc = PPI::Document->new('Foo.pm');
    $doc = Perl::Critic::Document->new($doc);
    ## Then use the instance just like a PPI::Document


DESCRIPTION

Perl::Critic does a lot of iterations over the PPI document tree via the PPI::Document::find() method. To save some time, this class pre-caches a lot of the common find() calls in a single traversal. Then, on subsequent requests we return the cached data.

This is implemented as a facade, where method calls are handed to the stored PPI::Document instance.


CAVEATS

This facade does not implement the overloaded operators from the PPI::Document manpage (that is, the use overload ... work). Therefore, users of this facade must not rely on that syntactic sugar. So, for example, instead of my $source = "$doc"; you should write my $source = $doc-content();>

Perhaps there is a CPAN module out there which implements a facade better than we do here?


METHODS

$pkg->new($doc)
Create a new instance referencing a PPI::Document instance.

$self->ppi_document()
Accessor for the wrapped PPI::Document instance. Note that altering this instance in any way can cause unpredictable failures in Perl::Critic's subsequent analysis because some caches may fall out of date.

$self->find($wanted)
$self->find_first($wanted)
$self->find_any($wanted)
If $wanted is a simple PPI class name, then the cache is employed. Otherwise we forward the call to the corresponding method of the PPI::Document instance.

$self->filename()
Returns the filename for the source code if applicable (PPI::Document::File) or undef otherwise (PPI::Document).

$self->isa( $classname )
To be compatible with other modules that expect to get a PPI::Document, the Perl::Critic::Document class masquerades as the PPI::Document class.


AUTHOR

Chris Dolan <cdolan@cpan.org>


COPYRIGHT

Copyright (c) 2006 Chris Dolan. 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.

 Perl::Critic::Document - Caching wrapper around PPI::Document