testmark-go

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 · 61d171ddc5