2017-08-18 22:57:27 +02:00
|
|
|
<?php declare(strict_types=1);
|
2011-08-09 09:27:47 +02:00
|
|
|
|
2014-02-06 14:44:16 +01:00
|
|
|
namespace PhpParser;
|
|
|
|
|
2022-08-28 22:57:06 +02:00
|
|
|
interface NodeVisitor {
|
2023-05-20 21:37:34 +02:00
|
|
|
/**
|
|
|
|
* 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;
|
|
|
|
|
2023-05-21 15:41:41 +02:00
|
|
|
/**
|
|
|
|
* 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;
|
|
|
|
|
2011-08-09 09:27:47 +02:00
|
|
|
/**
|
|
|
|
* Called once before traversal.
|
|
|
|
*
|
2011-09-24 23:37:47 +02:00
|
|
|
* Return value semantics:
|
|
|
|
* * null: $nodes stays as-is
|
|
|
|
* * otherwise: $nodes is set to the return value
|
|
|
|
*
|
2014-02-06 14:44:16 +01:00
|
|
|
* @param Node[] $nodes Array of nodes
|
2011-09-24 23:37:47 +02:00
|
|
|
*
|
2014-02-06 14:44:16 +01:00
|
|
|
* @return null|Node[] Array of nodes
|
2011-08-09 09:27:47 +02:00
|
|
|
*/
|
2011-09-24 23:37:47 +02:00
|
|
|
public function beforeTraverse(array $nodes);
|
2011-08-09 09:27:47 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Called when entering a node.
|
|
|
|
*
|
2011-09-24 23:37:47 +02:00
|
|
|
* Return value semantics:
|
2017-01-25 23:28:44 +01:00
|
|
|
* * null
|
|
|
|
* => $node stays as-is
|
2022-09-03 18:38:22 +02:00
|
|
|
* * array (of Nodes)
|
|
|
|
* => The return value is merged into the parent array (at the position of the $node)
|
2023-05-21 15:41:41 +02:00
|
|
|
* * NodeVisitor::REMOVE_NODE
|
2022-09-03 18:15:36 +02:00
|
|
|
* => $node is removed from the parent array
|
2023-05-21 15:41:41 +02:00
|
|
|
* * NodeVisitor::REPLACE_WITH_NULL
|
|
|
|
* => $node is replaced with null
|
|
|
|
* * NodeVisitor::DONT_TRAVERSE_CHILDREN
|
2017-01-25 23:28:44 +01:00
|
|
|
* => Children of $node are not traversed. $node stays as-is
|
2023-05-21 15:41:41 +02:00
|
|
|
* * NodeVisitor::DONT_TRAVERSE_CURRENT_AND_CHILDREN
|
2022-09-03 18:15:36 +02:00
|
|
|
* => Further visitors for the current node are skipped, and its children are not
|
|
|
|
* traversed. $node stays as-is.
|
2023-05-21 15:41:41 +02:00
|
|
|
* * NodeVisitor::STOP_TRAVERSAL
|
2017-01-29 22:33:42 +01:00
|
|
|
* => Traversal is aborted. $node stays as-is
|
2017-01-25 23:28:44 +01:00
|
|
|
* * otherwise
|
|
|
|
* => $node is set to the return value
|
2011-09-24 23:37:47 +02:00
|
|
|
*
|
2014-02-06 14:44:16 +01:00
|
|
|
* @param Node $node Node
|
2011-09-24 23:37:47 +02:00
|
|
|
*
|
2022-09-11 12:10:41 +02:00
|
|
|
* @return null|int|Node|Node[] Replacement node (or special return value)
|
2011-08-09 09:27:47 +02:00
|
|
|
*/
|
2014-02-06 14:44:16 +01:00
|
|
|
public function enterNode(Node $node);
|
2011-08-09 09:27:47 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Called when leaving a node.
|
|
|
|
*
|
2011-09-24 23:37:47 +02:00
|
|
|
* Return value semantics:
|
2017-01-25 23:28:44 +01:00
|
|
|
* * null
|
|
|
|
* => $node stays as-is
|
2023-05-21 15:41:41 +02:00
|
|
|
* * NodeVisitor::REMOVE_NODE
|
2017-01-25 23:28:44 +01:00
|
|
|
* => $node is removed from the parent array
|
2023-05-21 15:41:41 +02:00
|
|
|
* * NodeVisitor::REPLACE_WITH_NULL
|
|
|
|
* => $node is replaced with null
|
|
|
|
* * NodeVisitor::STOP_TRAVERSAL
|
2017-01-29 22:33:42 +01:00
|
|
|
* => Traversal is aborted. $node stays as-is
|
2017-01-25 23:28:44 +01:00
|
|
|
* * 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
|
2011-09-24 23:37:47 +02:00
|
|
|
*
|
2014-02-06 14:44:16 +01:00
|
|
|
* @param Node $node Node
|
2011-09-24 23:37:47 +02:00
|
|
|
*
|
2017-02-03 22:34:27 +01:00
|
|
|
* @return null|int|Node|Node[] Replacement node (or special return value)
|
2011-08-09 09:27:47 +02:00
|
|
|
*/
|
2014-02-06 14:44:16 +01:00
|
|
|
public function leaveNode(Node $node);
|
2011-08-09 09:27:47 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Called once after traversal.
|
|
|
|
*
|
2011-09-24 23:37:47 +02:00
|
|
|
* Return value semantics:
|
|
|
|
* * null: $nodes stays as-is
|
|
|
|
* * otherwise: $nodes is set to the return value
|
|
|
|
*
|
2014-02-06 14:44:16 +01:00
|
|
|
* @param Node[] $nodes Array of nodes
|
2011-09-24 23:37:47 +02:00
|
|
|
*
|
2014-02-06 14:44:16 +01:00
|
|
|
* @return null|Node[] Array of nodes
|
2011-08-09 09:27:47 +02:00
|
|
|
*/
|
2011-09-24 23:37:47 +02:00
|
|
|
public function afterTraverse(array $nodes);
|
2018-01-10 15:04:06 -02:00
|
|
|
}
|