package main
import (
+ "cmp"
"context"
"encoding/json"
"fmt"
"math/bits"
"os"
"path/filepath"
+ "slices"
"time"
"unicode/utf8"
)
return node, built
}
+// Nodes returns the built nodes, ordered by level and then by index.
+func (t *Tree) Nodes() []Node {
+ nodes := make([]Node, 0, len(t.nodes))
+ for _, node := range t.nodes {
+ nodes = append(nodes, node)
+ }
+
+ slices.SortFunc(nodes, func(a, b Node) int {
+ return cmp.Or(cmp.Compare(a.Level, b.Level), cmp.Compare(a.Index, b.Index))
+ })
+
+ return nodes
+}
+
// leafSource returns the text that the leaf of message holds or summarizes.
func leafSource(message Message) string {
return message.Kind + ": " + message.Text