NAME
    Acme::PPIx::MetaSyntactic - rename functions and variables in a
    PPI::Document using Acme::MetaSyntactic

SYNOPSIS
     my $acme = "Acme::PPIx::MetaSyntactic"->new(document => \<<'END');
     use v5.010;
     use constant PLACE => "World";
 
     sub join_spaces {
        return join " ", @_;
     }
 
     my @greetings = qw(Hello);
 
     say join_spaces($greetings[0], PLACE);
     END
 
     say $acme->document;

    Example output:

     use v5.010;
     use constant VULTURE => "World";
 
     sub fraud {
        return join " ", @_;
     }
 
     my @gang_of_thieves = qw(Hello);
 
     say fraud($gang_of_thieves[0], VULTURE);

DESCRIPTION
    This module uses PPI to parse some Perl source code, find all the
    variables and function names defined in it, and reassign them random names
    using Acme::MetaSyntactic.

  Constructor
    This module is object-oriented, though there's really very little reason
    for it to be.

    `new(%attributes)`
        Moose-style constructor.

  Attributes
    All attributes are read-only.

    `document`
        The PPI::Document that will be munged.

        Can be coerced from a `Str` (filename), `ScalarRef[Str]` (string of
        Perl source), `ArrayRef[Str]` (lines of Perl source) or `FileHandle`.

        Required.

        Once the `document` attribute has been set, a trigger automatically
        runs the relabelling.

    `theme`
        The Acme::MetaSyntactic object that will be used to obtain new names.
        If your source code is more than a couple of lines; choose one that
        provides a large selection of names.

        Can be coerced from `Str` (theme name).

        Defaults to the "haddock" theme.

    `local_subs`
        HashRef where the keys are the names of subs which are considered
        locally defined (i.e. not Perl built-ins, and not imported) and thus
        available for relabelling. Values are expected to all be "1".

        Can be coerced from `ArrayRef[Str]`.

        Defaults to a list built by scanning the `document` with PPI.

    `names`
        HashRef mapping old names to new names. This will be populated by the
        relabelling process, but you may supply some initial values.

        Defaults to empty hashref.

    `already_used`
        HashRef keeping track of names already used in remapping, to avoid
        renaming two variables the same thing.

        Defaults to a hashref populated from `names`.

        This attribute cannot be provided to the constructor.

BUGS
    Please report any bugs to
    <http://rt.cpan.org/Dist/Display.html?Queue=Acme-PPIx-MetaSyntactic>.

SEE ALSO
    PPI, Acme::MetaSyntactic, Acme::MetaSyntactic::RefactorCode.

AUTHOR
    Toby Inkster <tobyink@cpan.org>.

COPYRIGHT AND LICENCE
    This software is copyright (c) 2013 by Toby Inkster.

    This is free software; you can redistribute it and/or modify it under the
    same terms as the Perl 5 programming language system itself.

DISCLAIMER OF WARRANTIES
    THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
    WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
    MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.

