Walk traverses an AST in depth-first order using the visitor pattern. Walk performs a depth-first traversal of the Abstract Syntax Tree starting from the given node. It uses the Visitor interface to allow custom processing at each node. Traversal Algorithm: 1. Call v.Visit(node) for the current no
(v Visitor, node Node)
| 159 | // |
| 160 | // See also: Inspect(), Visitor, Inspector |
| 161 | func Walk(v Visitor, node Node) error { |
| 162 | if node == nil { |
| 163 | return nil |
| 164 | } |
| 165 | |
| 166 | visitor, err := v.Visit(node) |
| 167 | if err != nil { |
| 168 | return err |
| 169 | } |
| 170 | |
| 171 | if visitor == nil { |
| 172 | return nil |
| 173 | } |
| 174 | |
| 175 | for _, child := range node.Children() { |
| 176 | if err := Walk(visitor, child); err != nil { |
| 177 | return err |
| 178 | } |
| 179 | } |
| 180 | |
| 181 | _, err = visitor.Visit(nil) |
| 182 | return err |
| 183 | } |
| 184 | |
| 185 | // Inspector represents a function-based AST visitor for simplified traversal. |
| 186 | // |