| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 | <?php declare(strict_types=1);namespace PhpParser;interface NodeVisitor {    /**     * If NodeVisitor::enterNode() returns DONT_TRAVERSE_CHILDREN, child nodes     * of the current node will not be traversed for any visitors.     *     * For subsequent visitors enterNode() will still be called on the current     * node and leaveNode() will also be invoked for the current node.     */    public const DONT_TRAVERSE_CHILDREN = 1;    /**     * If NodeVisitor::enterNode() or NodeVisitor::leaveNode() returns     * STOP_TRAVERSAL, traversal is aborted.     *     * The afterTraverse() method will still be invoked.     */    public const STOP_TRAVERSAL = 2;    /**     * If NodeVisitor::leaveNode() returns REMOVE_NODE for a node that occurs     * in an array, it will be removed from the array.     *     * For subsequent visitors leaveNode() will still be invoked for the     * removed node.     */    public const REMOVE_NODE = 3;    /**     * If NodeVisitor::enterNode() returns DONT_TRAVERSE_CURRENT_AND_CHILDREN, child nodes     * of the current node will not be traversed for any visitors.     *     * For subsequent visitors enterNode() will not be called as well.     * leaveNode() will be invoked for visitors that has enterNode() method invoked.     */    public const DONT_TRAVERSE_CURRENT_AND_CHILDREN = 4;    /**     * If NodeVisitor::enterNode() or NodeVisitor::leaveNode() returns REPLACE_WITH_NULL,     * the node will be replaced with null. This is not a legal return value if the node is part     * of an array, rather than another node.     */    public const REPLACE_WITH_NULL = 5;    /**     * Called once before traversal.     *     * Return value semantics:     *  * null:      $nodes stays as-is     *  * otherwise: $nodes is set to the return value     *     * @param Node[] $nodes Array of nodes     *     * @return null|Node[] Array of nodes     */    public function beforeTraverse(array $nodes);    /**     * Called when entering a node.     *     * Return value semantics:     *  * null     *        => $node stays as-is     *  * array (of Nodes)     *        => The return value is merged into the parent array (at the position of the $node)     *  * NodeVisitor::REMOVE_NODE     *        => $node is removed from the parent array     *  * NodeVisitor::REPLACE_WITH_NULL     *        => $node is replaced with null     *  * NodeVisitor::DONT_TRAVERSE_CHILDREN     *        => Children of $node are not traversed. $node stays as-is     *  * NodeVisitor::DONT_TRAVERSE_CURRENT_AND_CHILDREN     *        => Further visitors for the current node are skipped, and its children are not     *           traversed. $node stays as-is.     *  * NodeVisitor::STOP_TRAVERSAL     *        => Traversal is aborted. $node stays as-is     *  * otherwise     *        => $node is set to the return value     *     * @param Node $node Node     *     * @return null|int|Node|Node[] Replacement node (or special return value)     */    public function enterNode(Node $node);    /**     * Called when leaving a node.     *     * Return value semantics:     *  * null     *        => $node stays as-is     *  * NodeVisitor::REMOVE_NODE     *        => $node is removed from the parent array     *  * NodeVisitor::REPLACE_WITH_NULL     *        => $node is replaced with null     *  * NodeVisitor::STOP_TRAVERSAL     *        => Traversal is aborted. $node stays as-is     *  * array (of Nodes)     *        => The return value is merged into the parent array (at the position of the $node)     *  * otherwise     *        => $node is set to the return value     *     * @param Node $node Node     *     * @return null|int|Node|Node[] Replacement node (or special return value)     */    public function leaveNode(Node $node);    /**     * Called once after traversal.     *     * Return value semantics:     *  * null:      $nodes stays as-is     *  * otherwise: $nodes is set to the return value     *     * @param Node[] $nodes Array of nodes     *     * @return null|Node[] Array of nodes     */    public function afterTraverse(array $nodes);}
 |