mirror of
https://github.com/go-task/task.git
synced 2025-05-13 22:16:31 +02:00
45 lines
1.2 KiB
Go
45 lines
1.2 KiB
Go
package sort
|
|
|
|
import (
|
|
"slices"
|
|
"sort"
|
|
"strings"
|
|
)
|
|
|
|
// A Sorter is any function that sorts a set of tasks.
|
|
type Sorter func(items []string, namespaces []string) []string
|
|
|
|
// NoSort leaves the tasks in the order they are defined.
|
|
func NoSort(items []string, namespaces []string) []string {
|
|
return items
|
|
}
|
|
|
|
// AlphaNumeric sorts the JSON output so that tasks are in alpha numeric order
|
|
// by task name.
|
|
func AlphaNumeric(items []string, namespaces []string) []string {
|
|
slices.Sort(items)
|
|
return items
|
|
}
|
|
|
|
// AlphaNumericWithRootTasksFirst sorts the JSON output so that tasks are in
|
|
// alpha numeric order by task name. It will also ensure that tasks that are not
|
|
// namespaced will be listed before tasks that are. We detect this by searching
|
|
// for a ':' in the task name.
|
|
func AlphaNumericWithRootTasksFirst(items []string, namespaces []string) []string {
|
|
if len(namespaces) > 0 {
|
|
return AlphaNumeric(items, namespaces)
|
|
}
|
|
sort.Slice(items, func(i, j int) bool {
|
|
iContainsColon := strings.Contains(items[i], ":")
|
|
jContainsColon := strings.Contains(items[j], ":")
|
|
if iContainsColon == jContainsColon {
|
|
return items[i] < items[j]
|
|
}
|
|
if !iContainsColon && jContainsColon {
|
|
return true
|
|
}
|
|
return false
|
|
})
|
|
return items
|
|
}
|