@@ -3,28 +3,31 @@ local DirectoryNode = require("nvim-tree.node.directory")
33
44local C = {}
55
6- --- @class (exact ) SorterCfg
6+ --- @class (exact ) SorterState
77--- @field sorter string | fun ( nodes : Node[] )
88--- @field folders_first boolean
99--- @field files_first boolean
1010
1111--- @class (exact ) Sorter : Class
12- --- @field cfg SorterCfg
12+ --- @field state SorterState
1313--- @field user fun ( nodes : Node[] )?
1414--- @field pre string ?
1515local Sorter = Class :extend ()
1616
1717--- @class Sorter
18- --- @overload fun ( opts : table ): Sorter
18+ --- @overload fun ( args : SorterArgs ): Sorter
1919
20- --- @param opts table user options
21- function Sorter :new (opts )
22- self .cfg = vim .deepcopy (opts .sort )
20+ --- @class (exact ) SorterArgs
21+ --- @field explorer Explorer
2322
24- if type (self .cfg .sorter ) == " function" then
25- self .user = self .cfg .sorter --[[ @as fun(nodes: Node[])]]
26- elseif type (self .cfg .sorter ) == " string" then
27- self .pre = self .cfg .sorter --[[ @as string]]
23+ --- @param args SorterArgs
24+ function Sorter :new (args )
25+ self .state = vim .deepcopy (args .explorer .opts .sort )
26+
27+ if type (self .state .sorter ) == " function" then
28+ self .user = self .state .sorter --[[ @as fun(nodes: Node[])]]
29+ elseif type (self .state .sorter ) == " string" then
30+ self .pre = self .state .sorter --[[ @as string]]
2831 end
2932end
3033
3336--- @return fun ( a : Node , b : Node ): boolean
3437function Sorter :get_comparator (sorter )
3538 return function (a , b )
36- return (C [sorter ] or C .name )(a , b , self .cfg )
39+ return (C [sorter ] or C .name )(a , b , self .state )
3740 end
3841end
3942
5457--- Evaluate `sort.folders_first` and `sort.files_first`
5558--- @param a Node
5659--- @param b Node
57- --- @param cfg SorterCfg
60+ --- @param cfg SorterState
5861--- @return boolean | nil
5962local function folders_or_files_first (a , b , cfg )
6063 if not (cfg .folders_first or cfg .files_first ) then
178181--- @param a Node
179182--- @param b Node
180183--- @param ignorecase boolean | nil
181- --- @param cfg SorterCfg
184+ --- @param cfg SorterState
182185--- @return boolean
183186local function node_comparator_name_ignorecase_or_not (a , b , ignorecase , cfg )
184187 if not (a and b ) then
0 commit comments