Esempio n. 1
0
func (w *Walker) Walk(node ast.Node) {
	defer func() {
		if r := recover(); r != nil {
			fmt.Println(r)
			fmt.Printf("%T - %+v\n", node, node)
			panic(r)
		}
	}()

	if node == nil {
		fmt.Fprintf(w.W, "%s(<nil>)\n", strings.Repeat("\t", w.tabLevel))
	} else {
		fmt.Fprintf(w.W, "%s(%T)%s\n", strings.Repeat("\t", w.tabLevel), node, node.String())

		switch children := node.Children(); children {
		case nil:
		default:
			w.tabLevel += 1
			for _, child := range children {
				if child != nil {
					w.Walk(child)
				}
			}
			w.tabLevel -= 1
		}
	}
}