logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

Attean::TreeRewriter - Walk and rewrite subtrees

Author

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

Bugs

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

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.

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.

Name

       Attean::TreeRewriter - Walk and rewrite subtrees

Roles

       None.

See Also

Synopsis

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

Version

       This document describes Attean::TreeRewriter version 0.035

See Also