MCPcopy
hub / github.com/jesseduffield/lazygit / NodeSortComparator

Function NodeSortComparator

pkg/gui/filetree/node.go:77–113  ·  view source on GitHub ↗

NodeSortComparator returns a comparator function for sorting tree nodes based on the given sort order and case sensitivity. sortOrder must be one of: "mixed", "filesFirst", "foldersFirst".

(sortOrder string, caseSensitive bool)

Source from the content-addressed store, hash-verified

75// based on the given sort order and case sensitivity.
76// sortOrder must be one of: "mixed", "filesFirst", "foldersFirst".
77func NodeSortComparator[T any](sortOrder string, caseSensitive bool) func(a, b *Node[T]) int {
78 strCmp := strings.Compare
79 if !caseSensitive {
80 strCmp = func(a, b string) int {
81 return strings.Compare(strings.ToLower(a), strings.ToLower(b))
82 }
83 }
84
85 // dirVsFileOrder is the return value when a is a directory and b is a file.
86 // -1 means directories come first, 1 means files come first.
87 dirVsFileOrder := 0
88 switch sortOrder {
89 case "foldersFirst":
90 dirVsFileOrder = -1
91 case "filesFirst":
92 dirVsFileOrder = 1
93 }
94
95 if dirVsFileOrder != 0 {
96 return func(a, b *Node[T]) int {
97 aIsDir := !a.IsFile()
98 bIsDir := !b.IsFile()
99 if aIsDir != bIsDir {
100 if aIsDir {
101 return dirVsFileOrder
102 }
103 return -dirVsFileOrder
104 }
105 return strCmp(a.path, b.path)
106 }
107 }
108
109 // "mixed": sort by path only
110 return func(a, b *Node[T]) int {
111 return strCmp(a.path, b.path)
112 }
113}
114
115func (self *Node[T]) ForEachFile(cb func(*T) error) error {
116 if self.IsFile() {

Callers 7

TestBuildTreeFromFilesFunction · 0.85
SetTreeMethod · 0.85
SetTreeMethod · 0.85

Calls 1

IsFileMethod · 0.80

Tested by 5

TestBuildTreeFromFilesFunction · 0.68