Sorter uses classic, tidy opts
This commit is contained in:
@@ -57,7 +57,7 @@ function Explorer:new(args)
|
|||||||
self.open = true
|
self.open = true
|
||||||
self.opts = config
|
self.opts = config
|
||||||
|
|
||||||
self.sorters = Sorter(config)
|
self.sorters = Sorter({ explorer = self })
|
||||||
self.renderer = Renderer({ explorer = self })
|
self.renderer = Renderer({ explorer = self })
|
||||||
self.filters = Filters({ explorer = self })
|
self.filters = Filters({ explorer = self })
|
||||||
self.live_filter = LiveFilter({ explorer = self })
|
self.live_filter = LiveFilter({ explorer = self })
|
||||||
|
|||||||
@@ -3,28 +3,31 @@ local DirectoryNode = require("nvim-tree.node.directory")
|
|||||||
|
|
||||||
local C = {}
|
local C = {}
|
||||||
|
|
||||||
---@class (exact) SorterCfg
|
---@class (exact) SorterState
|
||||||
---@field sorter string|fun(nodes: Node[])
|
---@field sorter string|fun(nodes: Node[])
|
||||||
---@field folders_first boolean
|
---@field folders_first boolean
|
||||||
---@field files_first boolean
|
---@field files_first boolean
|
||||||
|
|
||||||
---@class (exact) Sorter: Class
|
---@class (exact) Sorter: Class
|
||||||
---@field cfg SorterCfg
|
---@field state SorterState
|
||||||
---@field user fun(nodes: Node[])?
|
---@field user fun(nodes: Node[])?
|
||||||
---@field pre string?
|
---@field pre string?
|
||||||
local Sorter = Class:extend()
|
local Sorter = Class:extend()
|
||||||
|
|
||||||
---@class Sorter
|
---@class Sorter
|
||||||
---@overload fun(opts: table): Sorter
|
---@overload fun(args: SorterArgs): Sorter
|
||||||
|
|
||||||
---@param opts table user options
|
---@class (exact) SorterArgs
|
||||||
function Sorter:new(opts)
|
---@field explorer Explorer
|
||||||
self.cfg = vim.deepcopy(opts.sort)
|
|
||||||
|
|
||||||
if type(self.cfg.sorter) == "function" then
|
---@param args SorterArgs
|
||||||
self.user = self.cfg.sorter --[[@as fun(nodes: Node[])]]
|
function Sorter:new(args)
|
||||||
elseif type(self.cfg.sorter) == "string" then
|
self.state = vim.deepcopy(args.explorer.opts.sort)
|
||||||
self.pre = self.cfg.sorter --[[@as string]]
|
|
||||||
|
if type(self.state.sorter) == "function" then
|
||||||
|
self.user = self.state.sorter --[[@as fun(nodes: Node[])]]
|
||||||
|
elseif type(self.state.sorter) == "string" then
|
||||||
|
self.pre = self.state.sorter --[[@as string]]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -33,7 +36,7 @@ end
|
|||||||
---@return fun(a: Node, b: Node): boolean
|
---@return fun(a: Node, b: Node): boolean
|
||||||
function Sorter:get_comparator(sorter)
|
function Sorter:get_comparator(sorter)
|
||||||
return function(a, b)
|
return function(a, b)
|
||||||
return (C[sorter] or C.name)(a, b, self.cfg)
|
return (C[sorter] or C.name)(a, b, self.state)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -54,7 +57,7 @@ end
|
|||||||
---Evaluate `sort.folders_first` and `sort.files_first`
|
---Evaluate `sort.folders_first` and `sort.files_first`
|
||||||
---@param a Node
|
---@param a Node
|
||||||
---@param b Node
|
---@param b Node
|
||||||
---@param cfg SorterCfg
|
---@param cfg SorterState
|
||||||
---@return boolean|nil
|
---@return boolean|nil
|
||||||
local function folders_or_files_first(a, b, cfg)
|
local function folders_or_files_first(a, b, cfg)
|
||||||
if not (cfg.folders_first or cfg.files_first) then
|
if not (cfg.folders_first or cfg.files_first) then
|
||||||
@@ -178,7 +181,7 @@ end
|
|||||||
---@param a Node
|
---@param a Node
|
||||||
---@param b Node
|
---@param b Node
|
||||||
---@param ignorecase boolean|nil
|
---@param ignorecase boolean|nil
|
||||||
---@param cfg SorterCfg
|
---@param cfg SorterState
|
||||||
---@return boolean
|
---@return boolean
|
||||||
local function node_comparator_name_ignorecase_or_not(a, b, ignorecase, cfg)
|
local function node_comparator_name_ignorecase_or_not(a, b, ignorecase, cfg)
|
||||||
if not (a and b) then
|
if not (a and b) then
|
||||||
|
|||||||
Reference in New Issue
Block a user