diff --git a/lua/nvim-tree/actions/moves/item.lua b/lua/nvim-tree/actions/moves/item.lua index 9c4ccd55..449cb221 100644 --- a/lua/nvim-tree/actions/moves/item.lua +++ b/lua/nvim-tree/actions/moves/item.lua @@ -1,4 +1,3 @@ -local utils = require("nvim-tree.utils") local view = require("nvim-tree.view") local core = require("nvim-tree.core") local diagnostics = require("nvim-tree.diagnostics") @@ -36,7 +35,7 @@ end ---@param skip_gitignored boolean? default false local function move(explorer, where, what, skip_gitignored) local first_node_line = core.get_nodes_starting_line() - local nodes_by_line = utils.get_nodes_by_line(explorer.nodes, first_node_line) + local nodes_by_line = explorer:get_nodes_by_line(first_node_line) local iter_start, iter_end, iter_step, cur, first, nex local cursor = explorer:get_cursor_position() diff --git a/lua/nvim-tree/explorer/init.lua b/lua/nvim-tree/explorer/init.lua index fbf33518..db1961a8 100644 --- a/lua/nvim-tree/explorer/init.lua +++ b/lua/nvim-tree/explorer/init.lua @@ -527,7 +527,7 @@ function Explorer:get_node_at_cursor() return self end - return utils.get_nodes_by_line(self.nodes, core.get_nodes_starting_line())[cursor[1]] + return self:get_nodes_by_line(core.get_nodes_starting_line())[cursor[1]] end function Explorer:place_cursor_on_node() @@ -560,7 +560,7 @@ function Explorer:find_node_line(node) end local first_node_line = core.get_nodes_starting_line() - local nodes_by_line = utils.get_nodes_by_line(self.nodes, first_node_line) + local nodes_by_line = self:get_nodes_by_line(first_node_line) local iter_start, iter_end = first_node_line, #nodes_by_line for line = iter_start, iter_end, 1 do @@ -646,6 +646,29 @@ function Explorer:find_node(fn) return node, i end +--- Return visible nodes indexed by line +---@param line_start number +---@return table +function Explorer:get_nodes_by_line(line_start) + local nodes_by_line = {} + local line = line_start + + Iterator.builder(self.nodes) + :applier(function(node) + if node.group_next then + return + end + nodes_by_line[line] = node + line = line + 1 + end) + :recursor(function(node) + return node.group_next and { node.group_next } or (node.open and #node.nodes > 0 and node.nodes) + end) + :iterate() + + return nodes_by_line +end + ---Api.tree.get_nodes ---@return nvim_tree.api.Node function Explorer:get_nodes() diff --git a/lua/nvim-tree/utils.lua b/lua/nvim-tree/utils.lua index 78ca7815..b98301e6 100644 --- a/lua/nvim-tree/utils.lua +++ b/lua/nvim-tree/utils.lua @@ -1,5 +1,3 @@ -local Iterator = require("nvim-tree.iterators.node-iterator") - local M = { debouncers = {}, } @@ -149,30 +147,6 @@ M.default_format_hidden_count = function(hidden_count, simple) return nil end ---- Return visible nodes indexed by line ----@param nodes_all Node[] ----@param line_start number ----@return table -function M.get_nodes_by_line(nodes_all, line_start) - local nodes_by_line = {} - local line = line_start - - Iterator.builder(nodes_all) - :applier(function(node) - if node.group_next then - return - end - nodes_by_line[line] = node - line = line + 1 - end) - :recursor(function(node) - return node.group_next and { node.group_next } or (node.open and #node.nodes > 0 and node.nodes) - end) - :iterate() - - return nodes_by_line -end - function M.rename_loaded_buffers(old_path, new_path) -- delete new if it exists for _, buf in pairs(vim.api.nvim_list_bufs()) do