1: <?php declare(strict_types=1);
2:
3: namespace PhpParser;
4:
5: interface NodeVisitor {
6: /**
7: * If NodeVisitor::enterNode() returns DONT_TRAVERSE_CHILDREN, child nodes
8: * of the current node will not be traversed for any visitors.
9: *
10: * For subsequent visitors enterNode() will still be called on the current
11: * node and leaveNode() will also be invoked for the current node.
12: */
13: public const DONT_TRAVERSE_CHILDREN = 1;
14:
15: /**
16: * If NodeVisitor::enterNode() or NodeVisitor::leaveNode() returns
17: * STOP_TRAVERSAL, traversal is aborted.
18: *
19: * The afterTraverse() method will still be invoked.
20: */
21: public const STOP_TRAVERSAL = 2;
22:
23: /**
24: * If NodeVisitor::leaveNode() returns REMOVE_NODE for a node that occurs
25: * in an array, it will be removed from the array.
26: *
27: * For subsequent visitors leaveNode() will still be invoked for the
28: * removed node.
29: */
30: public const REMOVE_NODE = 3;
31:
32: /**
33: * If NodeVisitor::enterNode() returns DONT_TRAVERSE_CURRENT_AND_CHILDREN, child nodes
34: * of the current node will not be traversed for any visitors.
35: *
36: * For subsequent visitors enterNode() will not be called as well.
37: * leaveNode() will be invoked for visitors that has enterNode() method invoked.
38: */
39: public const DONT_TRAVERSE_CURRENT_AND_CHILDREN = 4;
40:
41: /**
42: * If NodeVisitor::enterNode() or NodeVisitor::leaveNode() returns REPLACE_WITH_NULL,
43: * the node will be replaced with null. This is not a legal return value if the node is part
44: * of an array, rather than another node.
45: */
46: public const REPLACE_WITH_NULL = 5;
47:
48: /**
49: * Called once before traversal.
50: *
51: * Return value semantics:
52: * * null: $nodes stays as-is
53: * * otherwise: $nodes is set to the return value
54: *
55: * @param Node[] $nodes Array of nodes
56: *
57: * @return null|Node[] Array of nodes
58: */
59: public function beforeTraverse(array $nodes);
60:
61: /**
62: * Called when entering a node.
63: *
64: * Return value semantics:
65: * * null
66: * => $node stays as-is
67: * * array (of Nodes)
68: * => The return value is merged into the parent array (at the position of the $node)
69: * * NodeVisitor::REMOVE_NODE
70: * => $node is removed from the parent array
71: * * NodeVisitor::REPLACE_WITH_NULL
72: * => $node is replaced with null
73: * * NodeVisitor::DONT_TRAVERSE_CHILDREN
74: * => Children of $node are not traversed. $node stays as-is
75: * * NodeVisitor::DONT_TRAVERSE_CURRENT_AND_CHILDREN
76: * => Further visitors for the current node are skipped, and its children are not
77: * traversed. $node stays as-is.
78: * * NodeVisitor::STOP_TRAVERSAL
79: * => Traversal is aborted. $node stays as-is
80: * * otherwise
81: * => $node is set to the return value
82: *
83: * @param Node $node Node
84: *
85: * @return null|int|Node|Node[] Replacement node (or special return value)
86: */
87: public function enterNode(Node $node);
88:
89: /**
90: * Called when leaving a node.
91: *
92: * Return value semantics:
93: * * null
94: * => $node stays as-is
95: * * NodeVisitor::REMOVE_NODE
96: * => $node is removed from the parent array
97: * * NodeVisitor::REPLACE_WITH_NULL
98: * => $node is replaced with null
99: * * NodeVisitor::STOP_TRAVERSAL
100: * => Traversal is aborted. $node stays as-is
101: * * array (of Nodes)
102: * => The return value is merged into the parent array (at the position of the $node)
103: * * otherwise
104: * => $node is set to the return value
105: *
106: * @param Node $node Node
107: *
108: * @return null|int|Node|Node[] Replacement node (or special return value)
109: */
110: public function leaveNode(Node $node);
111:
112: /**
113: * Called once after traversal.
114: *
115: * Return value semantics:
116: * * null: $nodes stays as-is
117: * * otherwise: $nodes is set to the return value
118: *
119: * @param Node[] $nodes Array of nodes
120: *
121: * @return null|Node[] Array of nodes
122: */
123: public function afterTraverse(array $nodes);
124: }
125: