diff --git a/lua/nvim-tree.lua b/lua/nvim-tree.lua index 7f9b2352..4390adcf 100644 --- a/lua/nvim-tree.lua +++ b/lua/nvim-tree.lua @@ -1,6 +1,4 @@ -local lib = require("nvim-tree.lib") local log = require("nvim-tree.log") -local appearance = require("nvim-tree.appearance") local view = require("nvim-tree.view") local utils = require("nvim-tree.utils") local actions = require("nvim-tree.actions") @@ -115,27 +113,6 @@ function M.open_on_directory() actions.root.change_dir.force_dirchange(bufname, true) end -function M.place_cursor_on_node() - local ok, search = pcall(vim.fn.searchcount) - if ok and search and search.exact_match == 1 then - return - end - - local node = lib.get_node_at_cursor() - if not node or node.name == ".." then - return - end - node = node:get_parent_of_group() or node - - local line = vim.api.nvim_get_current_line() - local cursor = vim.api.nvim_win_get_cursor(0) - local idx = vim.fn.stridx(line, node.name) - - if idx >= 0 then - vim.api.nvim_win_set_cursor(0, { cursor[1], idx }) - end -end - ---@return table function M.get_config() return M.config @@ -173,19 +150,6 @@ local function setup_autocommands(opts) vim.api.nvim_create_autocmd(name, vim.tbl_extend("force", default_opts, custom_opts)) end - -- reset and draw (highlights) when colorscheme is changed - create_nvim_tree_autocmd("ColorScheme", { - callback = function() - appearance.setup() - view.reset_winhl() - - local explorer = core.get_explorer() - if explorer then - explorer.renderer:draw() - end - end, - }) - -- prevent new opened file from opening in the same window as nvim-tree create_nvim_tree_autocmd("BufWipeout", { pattern = "NvimTree_*", @@ -201,76 +165,9 @@ local function setup_autocommands(opts) end, }) - create_nvim_tree_autocmd("BufWritePost", { - callback = function() - if opts.auto_reload_on_write and not opts.filesystem_watchers.enable then - local explorer = core.get_explorer() - if explorer then - explorer:reload_explorer() - end - end - end, - }) - - create_nvim_tree_autocmd("BufReadPost", { - callback = function(data) - -- update opened file buffers - local explorer = core.get_explorer() - if not explorer then - return - end - if - (explorer.filters.config.filter_no_buffer or explorer.opts.highlight_opened_files ~= "none") and vim.bo[data.buf].buftype == "" - then - utils.debounce("Buf:filter_buffer", opts.view.debounce_delay, function() - explorer:reload_explorer() - end) - end - end, - }) - - create_nvim_tree_autocmd("BufUnload", { - callback = function(data) - -- update opened file buffers - local explorer = core.get_explorer() - if not explorer then - return - end - if - (explorer.filters.config.filter_no_buffer or explorer.opts.highlight_opened_files ~= "none") and vim.bo[data.buf].buftype == "" - then - utils.debounce("Buf:filter_buffer", opts.view.debounce_delay, function() - explorer:reload_explorer() - end) - end - end, - }) - - create_nvim_tree_autocmd("User", { - pattern = { "FugitiveChanged", "NeogitStatusRefreshed" }, - callback = function() - if not opts.filesystem_watchers.enable and opts.git.enable then - local explorer = core.get_explorer() - if explorer then - explorer:reload_git() - end - end - end, - }) - if opts.tab.sync.open then create_nvim_tree_autocmd("TabEnter", { callback = vim.schedule_wrap(M.tab_enter) }) end - if opts.hijack_cursor then - create_nvim_tree_autocmd("CursorMoved", { - pattern = "NvimTree_*", - callback = function() - if utils.is_nvim_tree_buf(0) then - M.place_cursor_on_node() - end - end, - }) - end if opts.sync_root_with_cwd then create_nvim_tree_autocmd("DirChanged", { callback = function() @@ -296,20 +193,6 @@ local function setup_autocommands(opts) create_nvim_tree_autocmd({ "BufEnter", "BufNewFile" }, { callback = M.open_on_directory }) end - create_nvim_tree_autocmd("BufEnter", { - pattern = "NvimTree_*", - callback = function() - if utils.is_nvim_tree_buf(0) then - if vim.fn.getcwd() ~= core.get_cwd() or (opts.reload_on_bufenter and not opts.filesystem_watchers.enable) then - local explorer = core.get_explorer() - if explorer then - explorer:reload_explorer() - end - end - end - end, - }) - if opts.view.centralize_selection then create_nvim_tree_autocmd("BufEnter", { pattern = "NvimTree_*", @@ -349,20 +232,6 @@ local function setup_autocommands(opts) end, }) end - - if opts.modified.enable then - create_nvim_tree_autocmd({ "BufModifiedSet", "BufWritePost" }, { - callback = function() - utils.debounce("Buf:modified", opts.view.debounce_delay, function() - require("nvim-tree.buffers").reload_modified() - local explorer = core.get_explorer() - if explorer then - explorer:reload_explorer() - end - end) - end, - }) - end end local DEFAULT_OPTS = { -- BEGIN_DEFAULT_OPTS @@ -805,13 +674,16 @@ local function localise_default_opts() end function M.purge_all_state() - require("nvim-tree.watcher").purge_watchers() view.close_all_tabs() view.abandon_all_windows() - if core.get_explorer() ~= nil then + local explorer = core.get_explorer() + if explorer then require("nvim-tree.git").purge_state() + explorer:destroy() core.reset_explorer() end + -- purge orphaned that were not destroyed by their nodes + require("nvim-tree.watcher").purge_watchers() end ---@param conf table|nil @@ -855,6 +727,7 @@ function M.setup(conf) require("nvim-tree.appearance").setup() require("nvim-tree.diagnostics").setup(opts) require("nvim-tree.explorer"):setup(opts) + require("nvim-tree.explorer.watch").setup(opts) require("nvim-tree.git").setup(opts) require("nvim-tree.git.utils").setup(opts) require("nvim-tree.view").setup(opts) diff --git a/lua/nvim-tree/actions/fs/rename-file.lua b/lua/nvim-tree/actions/fs/rename-file.lua index d60cbb49..da1ca001 100644 --- a/lua/nvim-tree/actions/fs/rename-file.lua +++ b/lua/nvim-tree/actions/fs/rename-file.lua @@ -1,5 +1,4 @@ local core = require("nvim-tree.core") -local lib = require("nvim-tree.lib") local utils = require("nvim-tree.utils") local events = require("nvim-tree.events") local notify = require("nvim-tree.notify") @@ -104,11 +103,15 @@ function M.fn(default_modifier) default_modifier = default_modifier or ":t" return function(node, modifier) - if type(node) ~= "table" then - node = lib.get_node_at_cursor() + local explorer = core.get_explorer() + if not explorer then + return end - if node == nil then + if type(node) ~= "table" then + node = explorer:get_node_at_cursor() + end + if not node then return end @@ -160,10 +163,7 @@ function M.fn(default_modifier) M.rename(node, prepend .. new_file_path .. append) if not M.config.filesystem_watchers.enable then - local explorer = core.get_explorer() - if explorer then - explorer:reload_explorer() - end + explorer:reload_explorer() end find_file(utils.path_remove_trailing(new_file_path)) diff --git a/lua/nvim-tree/actions/moves/item.lua b/lua/nvim-tree/actions/moves/item.lua index 997e0238..4390fa47 100644 --- a/lua/nvim-tree/actions/moves/item.lua +++ b/lua/nvim-tree/actions/moves/item.lua @@ -1,7 +1,6 @@ local utils = require("nvim-tree.utils") local view = require("nvim-tree.view") 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") @@ -30,15 +29,16 @@ local function status_is_valid(node, what, skip_gitignored) end ---Move to the next node that has a valid status. If none found, don't move. +---@param explorer Explorer ---@param where string where to move (forwards or backwards) ---@param what string type of status ---@param skip_gitignored boolean default false -local function move(where, what, skip_gitignored) +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(core.get_explorer().nodes, first_node_line) + local nodes_by_line = utils.get_nodes_by_line(explorer.nodes, first_node_line) local iter_start, iter_end, iter_step, cur, first, nex - local cursor = lib.get_cursor_position() + local cursor = explorer:get_cursor_position() if cursor and cursor[1] < first_node_line then cur = cursor[1] end @@ -82,16 +82,17 @@ local function expand_node(node) end --- Move to the next node recursively. +---@param explorer Explorer ---@param what string type of status ---@param skip_gitignored boolean default false -local function move_next_recursive(what, skip_gitignored) +local function move_next_recursive(explorer, what, skip_gitignored) -- If the current node: -- * is a directory -- * and is not the root node -- * and has a git/diag status -- * and is not opened -- expand it. - local node_init = lib.get_node_at_cursor() + local node_init = explorer:get_node_at_cursor() if not node_init then return end @@ -104,9 +105,9 @@ local function move_next_recursive(what, skip_gitignored) node_dir:expand_or_collapse(false) end - move("next", what, skip_gitignored) + move(explorer, "next", what, skip_gitignored) - local node_cur = lib.get_node_at_cursor() + local node_cur = explorer:get_node_at_cursor() if not node_cur then return end @@ -122,10 +123,10 @@ local function move_next_recursive(what, skip_gitignored) while dir_cur and i < MAX_DEPTH do expand_node(dir_cur) - move("next", what, skip_gitignored) + move(explorer, "next", what, skip_gitignored) -- Save current node. - node_cur = lib.get_node_at_cursor() + node_cur = explorer:get_node_at_cursor() dir_cur = node_cur and node_cur:as(DirectoryNode) i = i + 1 @@ -147,24 +148,25 @@ end --- 4.4) Call a non-recursive prev. --- 4.5) Save the current node and start back from 4.1. --- +---@param explorer Explorer ---@param what string type of status ---@param skip_gitignored boolean default false -local function move_prev_recursive(what, skip_gitignored) +local function move_prev_recursive(explorer, what, skip_gitignored) local node_init, node_cur -- 1) - node_init = lib.get_node_at_cursor() + node_init = explorer:get_node_at_cursor() if node_init == nil then return end -- 2) - move("prev", what, skip_gitignored) + move(explorer, "prev", what, skip_gitignored) - node_cur = lib.get_node_at_cursor() + node_cur = explorer:get_node_at_cursor() if node_cur == node_init.parent then -- 3) - move_prev_recursive(what, skip_gitignored) + move_prev_recursive(explorer, what, skip_gitignored) else -- i is used to limit iterations. local i = 0 @@ -196,10 +198,10 @@ local function move_prev_recursive(what, skip_gitignored) end -- 4.4) - move("prev", what, skip_gitignored) + move(explorer, "prev", what, skip_gitignored) -- 4.5) - node_cur = lib.get_node_at_cursor() + node_cur = explorer:get_node_at_cursor() i = i + 1 end @@ -214,6 +216,11 @@ end ---@return fun() function M.fn(opts) return function() + local explorer = core.get_explorer() + if not explorer then + return + end + local recurse = false local skip_gitignored = false @@ -227,14 +234,14 @@ function M.fn(opts) end if not recurse then - move(opts.where, opts.what, skip_gitignored) + move(explorer, opts.where, opts.what, skip_gitignored) return end if opts.where == "next" then - move_next_recursive(opts.what, skip_gitignored) + move_next_recursive(explorer, opts.what, skip_gitignored) elseif opts.where == "prev" then - move_prev_recursive(opts.what, skip_gitignored) + move_prev_recursive(explorer, opts.what, skip_gitignored) end end end diff --git a/lua/nvim-tree/actions/tree/modifiers/collapse-all.lua b/lua/nvim-tree/actions/tree/modifiers/collapse-all.lua index 214d572c..049be2bb 100644 --- a/lua/nvim-tree/actions/tree/modifiers/collapse-all.lua +++ b/lua/nvim-tree/actions/tree/modifiers/collapse-all.lua @@ -1,6 +1,5 @@ local utils = require("nvim-tree.utils") local core = require("nvim-tree.core") -local lib = require("nvim-tree.lib") local Iterator = require("nvim-tree.iterators.node-iterator") local DirectoryNode = require("nvim-tree.node.directory") @@ -26,10 +25,13 @@ end ---@param keep_buffers boolean function M.fn(keep_buffers) - local node = lib.get_node_at_cursor() local explorer = core.get_explorer() + if not explorer then + return + end - if explorer == nil then + local node = explorer:get_node_at_cursor() + if not node then return end diff --git a/lua/nvim-tree/actions/tree/modifiers/toggles.lua b/lua/nvim-tree/actions/tree/modifiers/toggles.lua index 782ab35e..8a468a95 100644 --- a/lua/nvim-tree/actions/tree/modifiers/toggles.lua +++ b/lua/nvim-tree/actions/tree/modifiers/toggles.lua @@ -1,13 +1,14 @@ -local lib = require("nvim-tree.lib") local utils = require("nvim-tree.utils") local core = require("nvim-tree.core") local M = {} ---@param explorer Explorer local function reload(explorer) - local node = lib.get_node_at_cursor() + local node = explorer:get_node_at_cursor() explorer:reload_explorer() - utils.focus_node_or_parent(node) + if node then + utils.focus_node_or_parent(node) + end end local function wrap_explorer(fn) diff --git a/lua/nvim-tree/api.lua b/lua/nvim-tree/api.lua index c0fe06bd..a2796cb1 100644 --- a/lua/nvim-tree/api.lua +++ b/lua/nvim-tree/api.lua @@ -1,4 +1,3 @@ -local lib = require("nvim-tree.lib") local core = require("nvim-tree.core") local view = require("nvim-tree.view") local utils = require("nvim-tree.utils") @@ -41,7 +40,7 @@ local Api = { diagnostics = {}, } ---- Print error when setup not called. +---Print error when setup not called. ---@param fn fun(...): any ---@return fun(...): any local function wrap(fn) @@ -54,28 +53,6 @@ local function wrap(fn) end end ----Inject the node as the first argument if present otherwise do nothing. ----@param fn fun(node: Node, ...): any ----@return fun(node: Node, ...): any -local function wrap_node(fn) - return function(node, ...) - node = node or lib.get_node_at_cursor() - if node then - return fn(node, ...) - end - end -end - ----Inject the node or nil as the first argument if absent. ----@param fn fun(node: Node, ...): any ----@return fun(node: Node, ...): any -local function wrap_node_or_nil(fn) - return function(node, ...) - node = node or lib.get_node_at_cursor() - return fn(node, ...) - end -end - ---Invoke a method on the singleton explorer. ---Print error when setup not called. ---@param explorer_method string explorer method name @@ -89,6 +66,28 @@ local function wrap_explorer(explorer_method) end) end +---Inject the node as the first argument if present otherwise do nothing. +---@param fn fun(node: Node, ...): any +---@return fun(node: Node, ...): any +local function wrap_node(fn) + return function(node, ...) + node = node or wrap_explorer("get_node_at_cursor")() + if node then + return fn(node, ...) + end + end +end + +---Inject the node or nil as the first argument if absent. +---@param fn fun(node: Node, ...): any +---@return fun(node: Node, ...): any +local function wrap_node_or_nil(fn) + return function(node, ...) + node = node or wrap_explorer("get_node_at_cursor")() + return fn(node, ...) + end +end + ---Invoke a member's method on the singleton explorer. ---Print error when setup not called. ---@param explorer_member string explorer member name @@ -147,8 +146,8 @@ Api.tree.change_root_to_node = wrap_node(function(node) end) Api.tree.change_root_to_parent = wrap_node(actions.root.dir_up.fn) -Api.tree.get_node_under_cursor = wrap(lib.get_node_at_cursor) -Api.tree.get_nodes = wrap(lib.get_nodes) +Api.tree.get_node_under_cursor = wrap_explorer("get_node_at_cursor") +Api.tree.get_nodes = wrap_explorer("get_nodes") ---@class ApiTreeFindFileOpts ---@field buf string|number|nil diff --git a/lua/nvim-tree/explorer/init.lua b/lua/nvim-tree/explorer/init.lua index 43563f84..ac958a44 100644 --- a/lua/nvim-tree/explorer/init.lua +++ b/lua/nvim-tree/explorer/init.lua @@ -1,3 +1,6 @@ +local appearance = require("nvim-tree.appearance") +local buffers = require("nvim-tree.buffers") +local core = require("nvim-tree.core") local git = require("nvim-tree.git") local log = require("nvim-tree.log") local notify = require("nvim-tree.notify") @@ -24,7 +27,9 @@ local FILTER_REASON = require("nvim-tree.enum").FILTER_REASON local config ---@class (exact) Explorer: RootNode +---@field uid_explorer number vim.uv.hrtime() at construction time ---@field opts table user options +---@field augroup_id integer ---@field renderer Renderer ---@field filters Filters ---@field live_filter LiveFilter @@ -58,6 +63,9 @@ function Explorer:create(path) o.explorer = o + o.uid_explorer = vim.uv.hrtime() + o.augroup_id = vim.api.nvim_create_augroup("NvimTree_Explorer_" .. o.uid_explorer, {}) + o.open = true o.opts = config @@ -68,11 +76,111 @@ function Explorer:create(path) o.marks = Marks:new(config, o) o.clipboard = Clipboard:new(config, o) + o:create_autocmds() + o:_load(o) return o end +function Explorer:destroy() + log.line("dev", "Explorer:destroy") + + vim.api.nvim_del_augroup_by_id(self.augroup_id) + + RootNode.destroy(self) +end + +function Explorer:create_autocmds() + -- reset and draw (highlights) when colorscheme is changed + vim.api.nvim_create_autocmd("ColorScheme", { + group = self.augroup_id, + callback = function() + appearance.setup() + view.reset_winhl() + self:draw() + end, + }) + + vim.api.nvim_create_autocmd("BufWritePost", { + group = self.augroup_id, + callback = function() + if self.opts.auto_reload_on_write and not self.opts.filesystem_watchers.enable then + self:reload_explorer() + end + end, + }) + + vim.api.nvim_create_autocmd("BufReadPost", { + group = self.augroup_id, + callback = function(data) + if (self.filters.config.filter_no_buffer or self.opts.highlight_opened_files ~= "none") and vim.bo[data.buf].buftype == "" then + utils.debounce("Buf:filter_buffer_" .. self.uid_explorer, self.opts.view.debounce_delay, function() + self:reload_explorer() + end) + end + end, + }) + + -- update opened file buffers + vim.api.nvim_create_autocmd("BufUnload", { + group = self.augroup_id, + callback = function(data) + if (self.filters.config.filter_no_buffer or self.opts.highlight_opened_files ~= "none") and vim.bo[data.buf].buftype == "" then + utils.debounce("Buf:filter_buffer_" .. self.uid_explorer, self.opts.view.debounce_delay, function() + self:reload_explorer() + end) + end + end, + }) + + vim.api.nvim_create_autocmd("BufEnter", { + group = self.augroup_id, + pattern = "NvimTree_*", + callback = function() + if utils.is_nvim_tree_buf(0) then + if vim.fn.getcwd() ~= core.get_cwd() or (self.opts.reload_on_bufenter and not self.opts.filesystem_watchers.enable) then + self:reload_explorer() + end + end + end, + }) + + vim.api.nvim_create_autocmd("User", { + group = self.augroup_id, + pattern = { "FugitiveChanged", "NeogitStatusRefreshed" }, + callback = function() + if not self.opts.filesystem_watchers.enable and self.opts.git.enable then + self:reload_git() + end + end, + }) + + if self.opts.hijack_cursor then + vim.api.nvim_create_autocmd("CursorMoved", { + group = self.augroup_id, + pattern = "NvimTree_*", + callback = function() + if utils.is_nvim_tree_buf(0) then + self:place_cursor_on_node() + end + end, + }) + end + + if self.opts.modified.enable then + vim.api.nvim_create_autocmd({ "BufModifiedSet", "BufWritePost" }, { + group = self.augroup_id, + callback = function() + utils.debounce("Buf:modified_" .. self.uid_explorer, self.opts.view.debounce_delay, function() + buffers.reload_modified() + self:reload_explorer() + end) + end, + }) + end +end + ---@param node DirectoryNode function Explorer:expand(node) self:_load(node) @@ -375,9 +483,61 @@ function Explorer:reload_git() event_running = false end +---Cursor position as per vim.api.nvim_win_get_cursor +---nil on no explorer or invalid view win +---@return integer[]|nil +function Explorer:get_cursor_position() + local winnr = view.get_winnr() + if not winnr or not vim.api.nvim_win_is_valid(winnr) then + return + end + + return vim.api.nvim_win_get_cursor(winnr) +end + +---@return Node|nil +function Explorer:get_node_at_cursor() + local cursor = self:get_cursor_position() + if not cursor then + return + end + + if cursor[1] == 1 and view.is_root_folder_visible(core.get_cwd()) then + return self + end + + return utils.get_nodes_by_line(self.nodes, core.get_nodes_starting_line())[cursor[1]] +end + +function Explorer:place_cursor_on_node() + local ok, search = pcall(vim.fn.searchcount) + if ok and search and search.exact_match == 1 then + return + end + + local node = self:get_node_at_cursor() + if not node or node.name == ".." then + return + end + node = node:get_parent_of_group() or node + + local line = vim.api.nvim_get_current_line() + local cursor = vim.api.nvim_win_get_cursor(0) + local idx = vim.fn.stridx(line, node.name) + + if idx >= 0 then + vim.api.nvim_win_set_cursor(0, { cursor[1], idx }) + end +end + +---Api.tree.get_nodes +---@return Node +function Explorer:get_nodes() + return self:clone() +end + function Explorer:setup(opts) config = opts - require("nvim-tree.explorer.watch").setup(opts) end return Explorer diff --git a/lua/nvim-tree/explorer/live-filter.lua b/lua/nvim-tree/explorer/live-filter.lua index 9c900483..9861195c 100644 --- a/lua/nvim-tree/explorer/live-filter.lua +++ b/lua/nvim-tree/explorer/live-filter.lua @@ -197,7 +197,7 @@ local function create_overlay(self) end function LiveFilter:start_filtering() - view.View.live_filter.prev_focused_node = require("nvim-tree.lib").get_node_at_cursor() + view.View.live_filter.prev_focused_node = self.explorer:get_node_at_cursor() self.filter = self.filter or "" self.explorer.renderer:draw() @@ -211,7 +211,7 @@ function LiveFilter:start_filtering() end function LiveFilter:clear_filter() - local node = require("nvim-tree.lib").get_node_at_cursor() + local node = self.explorer:get_node_at_cursor() local last_node = view.View.live_filter.prev_focused_node self.filter = nil diff --git a/lua/nvim-tree/lib.lua b/lua/nvim-tree/lib.lua index 6335d3e0..abd9d01e 100644 --- a/lua/nvim-tree/lib.lua +++ b/lua/nvim-tree/lib.lua @@ -1,6 +1,5 @@ local view = require("nvim-tree.view") local core = require("nvim-tree.core") -local utils = require("nvim-tree.utils") local events = require("nvim-tree.events") local notify = require("nvim-tree.notify") @@ -13,48 +12,6 @@ local M = { target_winid = nil, } ----Cursor position as per vim.api.nvim_win_get_cursor ----nil on no explorer or invalid view win ----@return integer[]|nil -function M.get_cursor_position() - if not core.get_explorer() then - return - end - - local winnr = view.get_winnr() - if not winnr or not vim.api.nvim_win_is_valid(winnr) then - return - end - - return vim.api.nvim_win_get_cursor(winnr) -end - ----@return Node|nil -function M.get_node_at_cursor() - local explorer = core.get_explorer() - if not explorer then - return - end - - local cursor = M.get_cursor_position() - if not cursor then - return - end - - if cursor[1] == 1 and view.is_root_folder_visible(core.get_cwd()) then - return explorer - end - - return utils.get_nodes_by_line(explorer.nodes, core.get_nodes_starting_line())[cursor[1]] -end - ----Api.tree.get_nodes ----@return Node[]? -function M.get_nodes() - local explorer = core.get_explorer() - return explorer and explorer:clone() -end - function M.set_target_win() local id = vim.api.nvim_get_current_win() local tree_id = view.get_winnr() diff --git a/lua/nvim-tree/log.lua b/lua/nvim-tree/log.lua index 7f02383a..bfb968ae 100644 --- a/lua/nvim-tree/log.lua +++ b/lua/nvim-tree/log.lua @@ -88,14 +88,12 @@ function M.set_inspect_opts(opts) end --- Write to log file the inspection of a node ---- defaults to the node under cursor if none is provided ---@param typ string as per log.types config ----@param node Node? node to be inspected +---@param node Node node to be inspected ---@param fmt string for string.format ---@param ... any arguments for string.format function M.node(typ, node, fmt, ...) if M.enabled(typ) then - node = node or require("nvim-tree.lib").get_node_at_cursor() M.raw(typ, string.format("[%s] [%s] %s\n%s\n", os.date("%Y-%m-%d %H:%M:%S"), typ, (fmt or "???"), vim.inspect(node, inspect_opts)), ...) end end diff --git a/lua/nvim-tree/marks/init.lua b/lua/nvim-tree/marks/init.lua index c2da9009..fde1e534 100644 --- a/lua/nvim-tree/marks/init.lua +++ b/lua/nvim-tree/marks/init.lua @@ -151,7 +151,7 @@ function Marks:bulk_move() return end - local node_at_cursor = lib.get_node_at_cursor() + local node_at_cursor = self.explorer:get_node_at_cursor() local default_path = core.get_cwd() if node_at_cursor and node_at_cursor:is(DirectoryNode) then @@ -190,7 +190,7 @@ end ---@private ---@param up boolean function Marks:navigate(up) - local node = lib.get_node_at_cursor() + local node = self.explorer:get_node_at_cursor() if not node then return end diff --git a/lua/nvim-tree/node/directory-link.lua b/lua/nvim-tree/node/directory-link.lua index f0543825..0e6fd338 100644 --- a/lua/nvim-tree/node/directory-link.lua +++ b/lua/nvim-tree/node/directory-link.lua @@ -32,6 +32,10 @@ function DirectoryLinkNode:create(explorer, parent, absolute_path, link_to, name return o end +function DirectoryLinkNode:destroy() + DirectoryNode.destroy(self) +end + -----Update the directory GitStatus of link target and the file status of the link itself -----@param parent_ignored boolean -----@param status table|nil diff --git a/lua/nvim-tree/node/file-link.lua b/lua/nvim-tree/node/file-link.lua index 2bdd79f1..2d2571f0 100644 --- a/lua/nvim-tree/node/file-link.lua +++ b/lua/nvim-tree/node/file-link.lua @@ -28,6 +28,10 @@ function FileLinkNode:create(explorer, parent, absolute_path, link_to, name, fs_ return o end +function FileLinkNode:destroy() + FileNode.destroy(self) +end + -----Update the GitStatus of the target otherwise the link itself -----@param parent_ignored boolean -----@param status table|nil diff --git a/lua/nvim-tree/node/file.lua b/lua/nvim-tree/node/file.lua index 0f01347c..398607c6 100644 --- a/lua/nvim-tree/node/file.lua +++ b/lua/nvim-tree/node/file.lua @@ -36,6 +36,10 @@ function FileNode:create(explorer, parent, absolute_path, name, fs_stat) return o end +function FileNode:destroy() + Node.destroy(self) +end + ---Update the GitStatus of the file ---@param parent_ignored boolean ---@param status table|nil diff --git a/lua/nvim-tree/node/root.lua b/lua/nvim-tree/node/root.lua index 1b236775..2fd037ce 100644 --- a/lua/nvim-tree/node/root.lua +++ b/lua/nvim-tree/node/root.lua @@ -23,4 +23,8 @@ function RootNode:is_dotfile() return false end +function RootNode:destroy() + DirectoryNode.destroy(self) +end + return RootNode