Visit(node Node) (w Visitor)
}
-// Helper functions for common node lists. They may be empty.
-
-func walkIdentList(v Visitor, list []*Ident) {
- for _, x := range list {
- Walk(v, x)
- }
-}
-
-func walkExprList(v Visitor, list []Expr) {
- for _, x := range list {
- Walk(v, x)
- }
-}
-
-func walkStmtList(v Visitor, list []Stmt) {
- for _, x := range list {
- Walk(v, x)
- }
-}
-
-func walkDeclList(v Visitor, list []Decl) {
- for _, x := range list {
- Walk(v, x)
+func walkList[N Node](v Visitor, list []N) {
+ for _, node := range list {
+ Walk(v, node)
}
}
// nothing to do
case *CommentGroup:
- for _, c := range n.List {
- Walk(v, c)
- }
+ walkList(v, n.List)
case *Field:
if n.Doc != nil {
Walk(v, n.Doc)
}
- walkIdentList(v, n.Names)
+ walkList(v, n.Names)
if n.Type != nil {
Walk(v, n.Type)
}
}
case *FieldList:
- for _, f := range n.List {
- Walk(v, f)
- }
+ walkList(v, n.List)
// Expressions
case *BadExpr, *Ident, *BasicLit:
if n.Type != nil {
Walk(v, n.Type)
}
- walkExprList(v, n.Elts)
+ walkList(v, n.Elts)
case *ParenExpr:
Walk(v, n.X)
case *IndexListExpr:
Walk(v, n.X)
- for _, index := range n.Indices {
- Walk(v, index)
- }
+ walkList(v, n.Indices)
case *SliceExpr:
Walk(v, n.X)
case *CallExpr:
Walk(v, n.Fun)
- walkExprList(v, n.Args)
+ walkList(v, n.Args)
case *StarExpr:
Walk(v, n.X)
Walk(v, n.X)
case *AssignStmt:
- walkExprList(v, n.Lhs)
- walkExprList(v, n.Rhs)
+ walkList(v, n.Lhs)
+ walkList(v, n.Rhs)
case *GoStmt:
Walk(v, n.Call)
Walk(v, n.Call)
case *ReturnStmt:
- walkExprList(v, n.Results)
+ walkList(v, n.Results)
case *BranchStmt:
if n.Label != nil {
}
case *BlockStmt:
- walkStmtList(v, n.List)
+ walkList(v, n.List)
case *IfStmt:
if n.Init != nil {
}
case *CaseClause:
- walkExprList(v, n.List)
- walkStmtList(v, n.Body)
+ walkList(v, n.List)
+ walkList(v, n.Body)
case *SwitchStmt:
if n.Init != nil {
if n.Comm != nil {
Walk(v, n.Comm)
}
- walkStmtList(v, n.Body)
+ walkList(v, n.Body)
case *SelectStmt:
Walk(v, n.Body)
if n.Doc != nil {
Walk(v, n.Doc)
}
- walkIdentList(v, n.Names)
+ walkList(v, n.Names)
if n.Type != nil {
Walk(v, n.Type)
}
- walkExprList(v, n.Values)
+ walkList(v, n.Values)
if n.Comment != nil {
Walk(v, n.Comment)
}
if n.Doc != nil {
Walk(v, n.Doc)
}
- for _, s := range n.Specs {
- Walk(v, s)
- }
+ walkList(v, n.Specs)
case *FuncDecl:
if n.Doc != nil {
Walk(v, n.Doc)
}
Walk(v, n.Name)
- walkDeclList(v, n.Decls)
+ walkList(v, n.Decls)
// don't walk n.Comments - they have been
// visited already through the individual
// nodes