// 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 } } } } } }