| // Copyright 2024 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package astutil |
| |
| import ( |
| "go/ast" |
| "iter" |
| ) |
| |
| // FlatFields 'flattens' an ast.FieldList, returning an iterator over each |
| // (name, field) combination in the list. For unnamed fields, the identifier is |
| // nil. |
| func FlatFields(list *ast.FieldList) iter.Seq2[*ast.Ident, *ast.Field] { |
| return func(yield func(*ast.Ident, *ast.Field) bool) { |
| if list == nil { |
| return |
| } |
| |
| for _, field := range list.List { |
| if len(field.Names) == 0 { |
| if !yield(nil, field) { |
| return |
| } |
| } else { |
| for _, name := range field.Names { |
| if !yield(name, field) { |
| return |
| } |
| } |
| } |
| } |
| } |
| } |