iterators.go
package testmark
import "iter"
// Hunks returns an iterator over all hunks in document order.
// Can be used with range loops: for hunk := range doc.Hunks() { ... }
func (d *Document) Hunks() iter.Seq[*Hunk] {
return func(yield func(*Hunk) bool) {
for _, info := range d.hunks {
if !yield(info.hunk) {
return
}
}
}
}
// HunksWithNames returns an iterator over hunks with their names.
// Can be used with range loops: for name, hunk := range doc.HunksWithNames() { ... }
func (d *Document) HunksWithNames() iter.Seq2[string, *Hunk] {
return func(yield func(string, *Hunk) bool) {
for _, info := range d.hunks {
if !yield(info.hunk.name, info.hunk) {
return
}
}
}
}
// Children returns an iterator over child entries.
// Can be used with range loops: for entry := range dirEntry.Children() { ... }
func (e *DirEntry) Children() iter.Seq[*DirEntry] {
return func(yield func(*DirEntry) bool) {
for _, entry := range e.childrenOrdered {
if !yield(entry) {
return
}
}
}
}
// ChildrenWithNames returns an iterator over child entries with their names.
// Can be used with range loops: for name, entry := range dirEntry.ChildrenWithNames() { ... }
func (e *DirEntry) ChildrenWithNames() iter.Seq2[string, *DirEntry] {
return func(yield func(string, *DirEntry) bool) {
for _, entry := range e.childrenOrdered {
if !yield(entry.name, entry) {
return
}
}
}
}
v2/iterators.go · 1.4 KiB · b9084569f7