package hclsyntax import ( "github.com/hashicorp/hcl/v2" ) // VisitFunc is the callback signature for VisitAll. type VisitFunc func(node Node) hcl.Diagnostics // VisitAll is a basic way to traverse the AST beginning with a particular // node. The given function will be called once for each AST node in // depth-first order, but no context is provided about the shape of the tree. // // The VisitFunc may return diagnostics, in which case they will be accumulated // and returned as a single set. func VisitAll(node Node, f VisitFunc) hcl.Diagnostics { diags := f(node) node.walkChildNodes(func(node Node) { diags = append(diags, VisitAll(node, f)...) }) return diags } // Walker is an interface used with Walk. type Walker interface { Enter(node Node) hcl.Diagnostics Exit(node Node) hcl.Diagnostics } // Walk is a more complex way to traverse the AST starting with a particular // node, which provides information about the tree structure via separate // Enter and Exit functions. func Walk(node Node, w Walker) hcl.Diagnostics { diags := w.Enter(node) node.walkChildNodes(func(node Node) { diags = append(diags, Walk(node, w)...) }) moreDiags := w.Exit(node) diags = append(diags, moreDiags...) return diags }