Skip to content

Commit

Permalink
refactor(#2886): multi instance: node class refactoring: DirectoryNod…
Browse files Browse the repository at this point in the history
…e:expand_or_collapse (#2957)

move expand_or_collapse to DirectoryNode
  • Loading branch information
alex-courtis committed Oct 13, 2024
1 parent 893957a commit 03f9dd2
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 33 deletions.
9 changes: 7 additions & 2 deletions lua/nvim-tree/actions/moves/item.lua
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ local core = require("nvim-tree.core")
local lib = require("nvim-tree.lib")
local diagnostics = require("nvim-tree.diagnostics")

local DirectoryNode = require("nvim-tree.node.directory")

local M = {}
local MAX_DEPTH = 100

Expand Down Expand Up @@ -70,8 +72,10 @@ local function move(where, what, skip_gitignored)
end
end

---@param node Node
local function expand_node(node)
if not node.open then
if node:is(DirectoryNode) and not node.open then
---@cast node DirectoryNode
-- Expand the node.
-- Should never collapse since we checked open.
node:expand_or_collapse()
Expand All @@ -96,7 +100,8 @@ local function move_next_recursive(what, skip_gitignored)
if node_init.name ~= ".." then -- root node cannot have a status
valid = status_is_valid(node_init, what, skip_gitignored)
end
if node_init.nodes ~= nil and valid and not node_init.open then
if node_init:is(DirectoryNode) and valid and not node_init.open then
---@cast node_init DirectoryNode
node_init:expand_or_collapse()
end

Expand Down
5 changes: 4 additions & 1 deletion lua/nvim-tree/api.lua
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ local help = require("nvim-tree.help")
local keymap = require("nvim-tree.keymap")
local notify = require("nvim-tree.notify")

local DirectoryNode = require("nvim-tree.node.directory")

local Api = {
tree = {},
node = {
Expand Down Expand Up @@ -213,7 +215,8 @@ local function open_or_expand_or_dir_up(mode, toggle_group)
return function(node)
if node.name == ".." then
actions.root.change_dir.fn("..")
elseif node.nodes then
elseif node:is(DirectoryNode) then
---@cast node DirectoryNode
node:expand_or_collapse(toggle_group)
elseif not toggle_group then
edit(mode, node)
Expand Down
29 changes: 29 additions & 0 deletions lua/nvim-tree/node/directory.lua
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,35 @@ function DirectoryNode:get_git_status()
end
end

function DirectoryNode:expand_or_collapse(toggle_group)
toggle_group = toggle_group or false
if self.has_children then
self.has_children = false
end

if #self.nodes == 0 then
self.explorer:expand(self)
end

local head_node = self:get_parent_of_group()
if toggle_group then
head_node:toggle_group_folders()
end

local open = self:last_group_node().open
local next_open
if toggle_group then
next_open = open
else
next_open = not open
end
for _, n in ipairs(head_node:get_all_nodes_in_group()) do
n.open = next_open
end

self.explorer.renderer:draw()
end

---Create a sanitized partial copy of a node, populating children recursively.
---@return DirectoryNode cloned
function DirectoryNode:clone()
Expand Down
30 changes: 0 additions & 30 deletions lua/nvim-tree/node/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -225,36 +225,6 @@ function BaseNode:ungroup_empty_folders()
end
end

function BaseNode:expand_or_collapse(toggle_group)
toggle_group = toggle_group or false
if self.has_children then
---@cast self DirectoryNode -- TODO #2886 move this to the class
self.has_children = false
end

if #self.nodes == 0 then
self.explorer:expand(self)
end

local head_node = self:get_parent_of_group()
if toggle_group then
head_node:toggle_group_folders()
end

local open = self:last_group_node().open
local next_open
if toggle_group then
next_open = open
else
next_open = not open
end
for _, n in ipairs(head_node:get_all_nodes_in_group()) do
n.open = next_open
end

self.explorer.renderer:draw()
end

---Create a sanitized partial copy of a node, populating children recursively.
---@return BaseNode cloned
function BaseNode:clone()
Expand Down

0 comments on commit 03f9dd2

Please sign in to comment.