Skip to content

refactor(#2886): multi instance: node class refactoring: DirectoryNode:expand_or_collapse #2957

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Oct 13, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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 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
Loading