| PPIx-EditorTools documentation | Contained in the PPIx-EditorTools distribution. |
my $munged = PPIx::EditorTools::RenamePackage->new->rename(
code => "package TestPackage;\nuse strict;\nBEGIN {
$^W = 1;
}\n1;\n",
replacement => 'NewPackage'
);
my $new_code_as_string = $munged->code;
my $package_ppi_element = $munged->element;
This module uses PPI to change the package name of code.
Constructor. Generally shouldn't be called with any arguments.
Accepts either a PPI::Document to process or a string containing
the code (which will be converted into a PPI::Document) to process.
Replaces the package name with that supplied in the replacement
parameter and returns a PPIx::EditorTools::ReturnObject with the
new code available via the ppi or code accessors, as a
PPI::Document or string, respectively.
Croaks with a "package name not found" exception if unable to find the package name.
This class inherits from PPIx::EditorTools.
Also see App::EditorTools, Padre, and PPI.
| PPIx-EditorTools documentation | Contained in the PPIx-EditorTools distribution. |
package PPIx::EditorTools::RenamePackage; # ABSTRACT: Change the package name use strict; BEGIN { $^W = 1; } use base 'PPIx::EditorTools'; use Class::XSAccessor accessors => { 'replacement' => 'replacement' }; use PPI; use Carp; our $VERSION = '0.15';
sub rename { my ( $self, %args ) = @_; $self->process_doc(%args); my $replacement = $args{replacement} || croak "replacement required"; my $doc = $self->ppi; # TODO: support MooseX::Declare my $package = $doc->find_first('PPI::Statement::Package') or die "no package found"; my $namespace = $package->schild(1) or croak "package name not found"; $namespace->isa('PPI::Token::Word') or croak "package name not found"; $namespace->{content} = $replacement; return PPIx::EditorTools::ReturnObject->new( ppi => $doc, element => $package ); } 1; __END__