Skip to content

Commit 966ef40

Browse files
committed
extract methods from lib
1 parent 98debc7 commit 966ef40

File tree

5 files changed

+70
-82
lines changed

5 files changed

+70
-82
lines changed

lua/nvim-tree/actions/moves/item.lua

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ local function expand_node(node)
7474
if not node.open then
7575
-- Expand the node.
7676
-- Should never collapse since we checked open.
77-
lib.expand_or_collapse(node)
77+
node:expand_or_collapse()
7878
end
7979
end
8080

@@ -97,7 +97,7 @@ local function move_next_recursive(what, skip_gitignored)
9797
valid = status_is_valid(node_init, what, skip_gitignored)
9898
end
9999
if node_init.nodes ~= nil and valid and not node_init.open then
100-
lib.expand_or_collapse(node_init)
100+
node_init:expand_or_collapse()
101101
end
102102

103103
move("next", what, skip_gitignored)

lua/nvim-tree/api.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ local function open_or_expand_or_dir_up(mode, toggle_group)
214214
if node.name == ".." then
215215
actions.root.change_dir.fn("..")
216216
elseif node.nodes then
217-
lib.expand_or_collapse(node, toggle_group)
217+
node:expand_or_collapse(toggle_group)
218218
elseif not toggle_group then
219219
edit(mode, node)
220220
end

lua/nvim-tree/lib.lua

Lines changed: 0 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -55,84 +55,6 @@ function M.get_nodes()
5555
return explorer and explorer:clone()
5656
end
5757

58-
---TODO move to node
59-
---Group empty folders
60-
-- Recursively group nodes
61-
---@param node Node
62-
---@return Node[]
63-
function M.group_empty_folders(node)
64-
local is_root = not node.parent
65-
local child_folder_only = node:has_one_child_folder() and node.nodes[1]
66-
if M.group_empty and not is_root and child_folder_only then
67-
node.group_next = child_folder_only
68-
local ns = M.group_empty_folders(child_folder_only)
69-
node.nodes = ns or {}
70-
return ns
71-
end
72-
return node.nodes
73-
end
74-
75-
---TODO move to node
76-
---Ungroup empty folders
77-
-- If a node is grouped, ungroup it: put node.group_next to the node.nodes and set node.group_next to nil
78-
---@param node Node
79-
function M.ungroup_empty_folders(node)
80-
local cur = node
81-
while cur and cur.group_next do
82-
cur.nodes = { cur.group_next }
83-
cur.group_next = nil
84-
cur = cur.nodes[1]
85-
end
86-
end
87-
88-
---TODO move to node
89-
-- Toggle group empty folders
90-
---@param head_node Node
91-
local function toggle_group_folders(head_node)
92-
local is_grouped = head_node.group_next ~= nil
93-
94-
if is_grouped then
95-
M.ungroup_empty_folders(head_node)
96-
else
97-
M.group_empty_folders(head_node)
98-
end
99-
end
100-
101-
---TODO move to node
102-
---@param node Node
103-
function M.expand_or_collapse(node, toggle_group)
104-
local explorer = core.get_explorer()
105-
106-
toggle_group = toggle_group or false
107-
if node.has_children then
108-
node.has_children = false
109-
end
110-
111-
if #node.nodes == 0 and explorer then
112-
explorer:expand(node)
113-
end
114-
115-
local head_node = node:get_parent_of_group()
116-
if toggle_group then
117-
toggle_group_folders(head_node)
118-
end
119-
120-
local open = node:last_group_node().open
121-
local next_open
122-
if toggle_group then
123-
next_open = open
124-
else
125-
next_open = not open
126-
end
127-
for _, n in ipairs(head_node:get_all_nodes_in_group()) do
128-
n.open = next_open
129-
end
130-
131-
if explorer then
132-
explorer.renderer:draw()
133-
end
134-
end
135-
13658
function M.set_target_win()
13759
local id = vim.api.nvim_get_current_win()
13860
local tree_id = view.get_winnr()

lua/nvim-tree/node/init.lua

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,72 @@ function BaseNode:get_all_nodes_in_group()
251251
return nodes
252252
end
253253

254+
-- Toggle group empty folders
255+
function BaseNode:toggle_group_folders()
256+
local is_grouped = self.group_next ~= nil
257+
258+
if is_grouped then
259+
self:ungroup_empty_folders()
260+
else
261+
self:group_empty_folders()
262+
end
263+
end
264+
265+
---Group empty folders
266+
-- Recursively group nodes
267+
---@return Node[]
268+
function BaseNode:group_empty_folders()
269+
local is_root = not self.parent
270+
local child_folder_only = self:has_one_child_folder() and self.nodes[1]
271+
if self.explorer.opts.renderer.group_empty and not is_root and child_folder_only then
272+
self.group_next = child_folder_only
273+
local ns = child_folder_only:group_empty_folders()
274+
self.nodes = ns or {}
275+
return ns
276+
end
277+
return self.nodes
278+
end
279+
280+
---Ungroup empty folders
281+
-- If a node is grouped, ungroup it: put node.group_next to the node.nodes and set node.group_next to nil
282+
function BaseNode:ungroup_empty_folders()
283+
local cur = self
284+
while cur and cur.group_next do
285+
cur.nodes = { cur.group_next }
286+
cur.group_next = nil
287+
cur = cur.nodes[1]
288+
end
289+
end
290+
291+
function BaseNode:expand_or_collapse(toggle_group)
292+
toggle_group = toggle_group or false
293+
if self.has_children then
294+
self.has_children = false
295+
end
296+
297+
if #self.nodes == 0 then
298+
self.explorer:expand(self)
299+
end
300+
301+
local head_node = self:get_parent_of_group()
302+
if toggle_group then
303+
head_node:toggle_group_folders()
304+
end
305+
306+
local open = self:last_group_node().open
307+
local next_open
308+
if toggle_group then
309+
next_open = open
310+
else
311+
next_open = not open
312+
end
313+
for _, n in ipairs(head_node:get_all_nodes_in_group()) do
314+
n.open = next_open
315+
end
316+
317+
self.explorer.renderer:draw()
318+
end
319+
254320
---Create a sanitized partial copy of a node, populating children recursively.
255321
---@return BaseNode cloned
256322
function BaseNode:clone()

lua/nvim-tree/renderer/builder.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -487,7 +487,7 @@ function Builder:build()
487487
return self
488488
end
489489

490-
---TODO refactor back to function; this was left here to reduce PR noise
490+
---@private
491491
---@param opts table
492492
---@return fun(node: Node): string|nil
493493
function Builder:setup_hidden_display_function(opts)

0 commit comments

Comments
 (0)