@@ -3,28 +3,31 @@ local DirectoryNode = require("nvim-tree.node.directory")
3
3
4
4
local C = {}
5
5
6
- --- @class (exact ) SorterCfg
6
+ --- @class (exact ) SorterState
7
7
--- @field sorter string | fun ( nodes : Node[] )
8
8
--- @field folders_first boolean
9
9
--- @field files_first boolean
10
10
11
11
--- @class (exact ) Sorter : Class
12
- --- @field cfg SorterCfg
12
+ --- @field state SorterState
13
13
--- @field user fun ( nodes : Node[] )?
14
14
--- @field pre string ?
15
15
local Sorter = Class :extend ()
16
16
17
17
--- @class Sorter
18
- --- @overload fun ( opts : table ): Sorter
18
+ --- @overload fun ( args : SorterArgs ): Sorter
19
19
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
23
22
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]]
28
31
end
29
32
end
30
33
33
36
--- @return fun ( a : Node , b : Node ): boolean
34
37
function Sorter :get_comparator (sorter )
35
38
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 )
37
40
end
38
41
end
39
42
54
57
--- Evaluate `sort.folders_first` and `sort.files_first`
55
58
--- @param a Node
56
59
--- @param b Node
57
- --- @param cfg SorterCfg
60
+ --- @param cfg SorterState
58
61
--- @return boolean | nil
59
62
local function folders_or_files_first (a , b , cfg )
60
63
if not (cfg .folders_first or cfg .files_first ) then
178
181
--- @param a Node
179
182
--- @param b Node
180
183
--- @param ignorecase boolean | nil
181
- --- @param cfg SorterCfg
184
+ --- @param cfg SorterState
182
185
--- @return boolean
183
186
local function node_comparator_name_ignorecase_or_not (a , b , ignorecase , cfg )
184
187
if not (a and b ) then
0 commit comments