treefmt/format/task.go

43 lines
897 B
Go
Raw Normal View History

package format
import (
"cmp"
"slices"
"git.numtide.com/numtide/treefmt/walk"
)
type Task struct {
File *walk.File
Formatters []*Formatter
BatchKey string
}
func NewTask(file *walk.File, formatters []*Formatter) Task {
// sort by priority in ascending order
slices.SortFunc(formatters, func(a, b *Formatter) int {
priorityA := a.Priority()
priorityB := b.Priority()
result := priorityA - priorityB
if result == 0 {
// formatters with the same priority are sorted lexicographically to ensure a deterministic outcome
result = cmp.Compare(a.Name(), b.Name())
}
return result
})
// construct a batch key which represents the unique sequence of formatters to be applied to file
var key string
for _, f := range formatters {
key += f.name + ":"
}
key = key[:len(key)-1]
return Task{
File: file,
Formatters: formatters,
BatchKey: key,
}
}