Provided by: libattean-perl_0.019-1_all bug

NAME

       Attean::TreeRewriter - Walk and rewrite subtrees

VERSION

       This document describes Attean::TreeRewriter version 0.019

SYNOPSIS

         use v5.14;
         use Attean;
         my $w = Attean::TreeRewriter->new();
         my ($rewritten, $tree) = $w->rewrite($tree, $thunk);
         if ($rewritten) {
               ...
         }

DESCRIPTION

       The Attean::TreeRewriter class walks the nodes of query trees and rewrites sub-trees based
       on handlers that have been registered prior to rewriting.

ROLES

       None.

METHODS

       "register_pre_handler( \&code )"
           Register a handler that will be called for each sub-tree during tree rewriting.

           The function will be called as "&code( $tree, $parent_node, $thunk )" where $thunk is
           an opaque value passed to "rewrite".

           The function must return a list "($handled, $descend, $rewritten)".  $handled is a
           boolean indicating whether the handler function rewrote the sub-tree, which is
           returned as $rewritten. The $descend boolean value indicates whether the the tree
           rewriting should continue downwards in the tree.

       "rewrite( $tree, $thunk, \%seen, $parent )"
           Rewrites the given $tree using the registered handler functions.  $thunk is passed
           through to each handler function.  %seen is currently unused.  $parent is passed
           through to the handler functions as the value of the pseudo-parent tree node for
           $tree.

           Returns a list "($handled, $tree)" with $handled indicating whether rewriting was
           performed, with the corresponding rewritten $tree.

BUGS

       Please report any bugs or feature requests to through the GitHub web interface at
       <https://github.com/kasei/attean/issues>.

SEE ALSO

AUTHOR

       Gregory Todd Williams  "<gwilliams@cpan.org>"

COPYRIGHT

       Copyright (c) 2014--2018 Gregory Todd Williams.  This program is free software; you can
       redistribute it and/or modify it under the same terms as Perl itself.