From d087a8204d027d45e604f83b41ea026c54b621a0 Mon Sep 17 00:00:00 2001 From: Alexander Courtis Date: Mon, 8 Sep 2025 14:57:49 +1000 Subject: [PATCH 1/9] refactor(#2942): multi instance: move find_node_line to Explorer --- lua/nvim-tree/actions/moves/item.lua | 2 +- lua/nvim-tree/explorer/init.lua | 21 +++++++++++++++++++++ lua/nvim-tree/utils.lua | 22 ---------------------- 3 files changed, 22 insertions(+), 23 deletions(-) diff --git a/lua/nvim-tree/actions/moves/item.lua b/lua/nvim-tree/actions/moves/item.lua index 8aacaae3b56..9c4ccd55936 100644 --- a/lua/nvim-tree/actions/moves/item.lua +++ b/lua/nvim-tree/actions/moves/item.lua @@ -191,7 +191,7 @@ local function move_prev_recursive(explorer, what, skip_gitignored) if node_init.name == ".." then -- root node view.set_cursor({ 1, 0 }) -- move to root node (position 1) else - local node_init_line = utils.find_node_line(node_init) + local node_init_line = explorer:find_node_line(node_init) if node_init_line < 0 then return end diff --git a/lua/nvim-tree/explorer/init.lua b/lua/nvim-tree/explorer/init.lua index 58972164afe..c81ce927da9 100644 --- a/lua/nvim-tree/explorer/init.lua +++ b/lua/nvim-tree/explorer/init.lua @@ -551,6 +551,27 @@ function Explorer:place_cursor_on_node() end end +-- Find the line number of a node. +---@param node Node? +---@return integer -1 not found +function Explorer:find_node_line(node) + if not node then + return -1 + 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 iter_start, iter_end = first_node_line, #nodes_by_line + + for line = iter_start, iter_end, 1 do + if nodes_by_line[line] == node then + return line + end + end + + return -1 +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 b51e29ac49e..b0e546950c6 100644 --- a/lua/nvim-tree/utils.lua +++ b/lua/nvim-tree/utils.lua @@ -134,28 +134,6 @@ function M.find_node(nodes, fn) return node, i end --- Find the line number of a node. --- Return -1 is node is nil or not found. ----@param node Node? ----@return integer -function M.find_node_line(node) - if not node then - return -1 - end - - local first_node_line = require("nvim-tree.core").get_nodes_starting_line() - local nodes_by_line = M.get_nodes_by_line(require("nvim-tree.core").get_explorer().nodes, first_node_line) - local iter_start, iter_end = first_node_line, #nodes_by_line - - for line = iter_start, iter_end, 1 do - if nodes_by_line[line] == node then - return line - end - end - - return -1 -end - ---@param extmarks vim.api.keyset.get_extmark_item[] as per vim.api.nvim_buf_get_extmarks ---@return number function M.extmarks_length(extmarks) From 29d8c83ba87a58abf8d485e3496a0bc3a367127d Mon Sep 17 00:00:00 2001 From: Alexander Courtis Date: Mon, 8 Sep 2025 15:10:38 +1000 Subject: [PATCH 2/9] refactor(#2942): multi instance: move get_node_from_path to Explorer --- lua/nvim-tree/actions/finders/find-file.lua | 2 +- lua/nvim-tree/explorer/init.lua | 27 +++++++++++++++++++++ lua/nvim-tree/git/init.lua | 10 ++++++-- 3 files changed, 36 insertions(+), 3 deletions(-) diff --git a/lua/nvim-tree/actions/finders/find-file.lua b/lua/nvim-tree/actions/finders/find-file.lua index 55e2f23d337..4f5d8089a85 100644 --- a/lua/nvim-tree/actions/finders/find-file.lua +++ b/lua/nvim-tree/actions/finders/find-file.lua @@ -32,7 +32,7 @@ function M.fn(path) local profile = log.profile_start("find file %s", path_real) -- refresh the contents of all parents, expanding groups as needed - if utils.get_node_from_path(path_real) == nil then + if explorer:get_node_from_path(path_real) == nil then explorer:refresh_parent_nodes_for_path(vim.fn.fnamemodify(path_real, ":h")) end diff --git a/lua/nvim-tree/explorer/init.lua b/lua/nvim-tree/explorer/init.lua index c81ce927da9..a3cadd9c6d7 100644 --- a/lua/nvim-tree/explorer/init.lua +++ b/lua/nvim-tree/explorer/init.lua @@ -572,6 +572,33 @@ function Explorer:find_node_line(node) return -1 end +-- get the node in the tree state depending on the absolute path of the node +-- (grouped or hidden too) +---@param path string +---@return Node|nil +---@return number|nil +function Explorer:get_node_from_path(path) + + if self.absolute_path == path then + return self + end + + return Iterator.builder(self.nodes) + :hidden() + :matcher(function(node) + return node.absolute_path == path or node.link_to == path + end) + :recursor(function(node) + if node.group_next then + return { node.group_next } + end + if node.nodes then + return node.nodes + end + end) + :iterate() +end + ---Api.tree.get_nodes ---@return nvim_tree.api.Node function Explorer:get_nodes() diff --git a/lua/nvim-tree/git/init.lua b/lua/nvim-tree/git/init.lua index 663e57c39a1..6277a6a4f78 100644 --- a/lua/nvim-tree/git/init.lua +++ b/lua/nvim-tree/git/init.lua @@ -233,7 +233,13 @@ local function reload_tree_at(toplevel) end log.line("watcher", "git event executing '%s'", toplevel) - local root_node = utils.get_node_from_path(toplevel) + + local explorer = require("nvim-tree.core").get_explorer() + if not explorer then + return nil + end + + local root_node = explorer:get_node_from_path(toplevel) if not root_node then return end @@ -252,7 +258,7 @@ local function reload_tree_at(toplevel) end) :iterate() - root_node.explorer.renderer:draw() + explorer.renderer:draw() end) end From a20c81733aab67b4b72bc8fad9d6f53798b35c42 Mon Sep 17 00:00:00 2001 From: Alexander Courtis Date: Mon, 8 Sep 2025 15:21:59 +1000 Subject: [PATCH 3/9] refactor(#2942): multi instance: move focus_file to Explorer --- lua/nvim-tree/actions/moves/sibling.lua | 10 +++++++--- lua/nvim-tree/explorer/init.lua | 8 ++++++++ lua/nvim-tree/explorer/live-filter.lua | 4 ++-- lua/nvim-tree/marks/init.lua | 2 +- lua/nvim-tree/utils.lua | 7 ------- 5 files changed, 18 insertions(+), 13 deletions(-) diff --git a/lua/nvim-tree/actions/moves/sibling.lua b/lua/nvim-tree/actions/moves/sibling.lua index cf5b492d387..24347db401d 100644 --- a/lua/nvim-tree/actions/moves/sibling.lua +++ b/lua/nvim-tree/actions/moves/sibling.lua @@ -1,4 +1,3 @@ -local utils = require("nvim-tree.utils") local core = require("nvim-tree.core") local Iterator = require("nvim-tree.iterators.node-iterator") @@ -12,9 +11,14 @@ function M.fn(direction) return end + local explorer = core.get_explorer() + if not explorer then + return + end + local first, last, next, prev = nil, nil, nil, nil local found = false - local parent = node.parent or core.get_explorer() + local parent = node.parent or explorer Iterator.builder(parent and parent.nodes or {}) :recursor(function() return nil @@ -45,7 +49,7 @@ function M.fn(direction) end if target_node then - utils.focus_file(target_node.absolute_path) + explorer:focus_file(target_node.absolute_path) end end end diff --git a/lua/nvim-tree/explorer/init.lua b/lua/nvim-tree/explorer/init.lua index a3cadd9c6d7..5a23f824cb8 100644 --- a/lua/nvim-tree/explorer/init.lua +++ b/lua/nvim-tree/explorer/init.lua @@ -599,6 +599,14 @@ function Explorer:get_node_from_path(path) :iterate() end +---@param path string +function Explorer:focus_file(path) + local _, i = utils.find_node(self.nodes, function(node) + return node.absolute_path == path + end) + view.set_cursor({ i + 1, 1 }) +end + ---Api.tree.get_nodes ---@return nvim_tree.api.Node function Explorer:get_nodes() diff --git a/lua/nvim-tree/explorer/live-filter.lua b/lua/nvim-tree/explorer/live-filter.lua index 62a7dd9ef64..df55773713b 100644 --- a/lua/nvim-tree/explorer/live-filter.lua +++ b/lua/nvim-tree/explorer/live-filter.lua @@ -220,9 +220,9 @@ function LiveFilter:clear_filter() self.explorer.renderer:draw() if node then - utils.focus_file(node.absolute_path) + self.explorer:focus_file(node.absolute_path) elseif last_node then - utils.focus_file(last_node.absolute_path) + self.explorer:focus_file(last_node.absolute_path) end end diff --git a/lua/nvim-tree/marks/init.lua b/lua/nvim-tree/marks/init.lua index c940f999983..54f751c4b33 100644 --- a/lua/nvim-tree/marks/init.lua +++ b/lua/nvim-tree/marks/init.lua @@ -263,7 +263,7 @@ function Marks:navigate_select() if node and not node:is(DirectoryNode) and not utils.get_win_buf_from_path(node.absolute_path) then open_file.fn("edit", node.absolute_path) elseif node then - utils.focus_file(node.absolute_path) + self.explorer:focus_file(node.absolute_path) end end) end diff --git a/lua/nvim-tree/utils.lua b/lua/nvim-tree/utils.lua index b0e546950c6..23bd2392a35 100644 --- a/lua/nvim-tree/utils.lua +++ b/lua/nvim-tree/utils.lua @@ -447,13 +447,6 @@ function M.debounce(context, timeout, callback) end) end -function M.focus_file(path) - local _, i = M.find_node(require("nvim-tree.core").get_explorer().nodes, function(node) - return node.absolute_path == path - end) - require("nvim-tree.view").set_cursor({ i + 1, 1 }) -end - ---Focus node passed as parameter if visible, otherwise focus first visible parent. ---If none of the parents is visible focus root. ---If node is nil do nothing. From f030ea6eface378f9895ba35dd8ce5ed5f7520dd Mon Sep 17 00:00:00 2001 From: Alexander Courtis Date: Mon, 8 Sep 2025 15:28:20 +1000 Subject: [PATCH 4/9] refactor(#2942): multi instance: move focus_node_or_parent to Explorer --- .../actions/tree/modifiers/collapse.lua | 2 +- lua/nvim-tree/explorer/filters.lua | 2 +- lua/nvim-tree/explorer/init.lua | 20 +++++++++++++++ lua/nvim-tree/marks/init.lua | 4 +-- lua/nvim-tree/utils.lua | 25 ------------------- 5 files changed, 24 insertions(+), 29 deletions(-) diff --git a/lua/nvim-tree/actions/tree/modifiers/collapse.lua b/lua/nvim-tree/actions/tree/modifiers/collapse.lua index 62da5f9ab4c..51a15f3d464 100644 --- a/lua/nvim-tree/actions/tree/modifiers/collapse.lua +++ b/lua/nvim-tree/actions/tree/modifiers/collapse.lua @@ -56,7 +56,7 @@ local function collapse(node, opts) :iterate() explorer.renderer:draw() - utils.focus_node_or_parent(node_at_cursor) + explorer:focus_node_or_parent(node_at_cursor) end diff --git a/lua/nvim-tree/explorer/filters.lua b/lua/nvim-tree/explorer/filters.lua index 62230687e40..fda0a79fbaf 100644 --- a/lua/nvim-tree/explorer/filters.lua +++ b/lua/nvim-tree/explorer/filters.lua @@ -280,7 +280,7 @@ function Filters:toggle(type) local node = self.explorer:get_node_at_cursor() self.explorer:reload_explorer() if node then - utils.focus_node_or_parent(node) + self.explorer:focus_node_or_parent(node) end end diff --git a/lua/nvim-tree/explorer/init.lua b/lua/nvim-tree/explorer/init.lua index 5a23f824cb8..4565b9c165b 100644 --- a/lua/nvim-tree/explorer/init.lua +++ b/lua/nvim-tree/explorer/init.lua @@ -607,6 +607,26 @@ function Explorer:focus_file(path) view.set_cursor({ i + 1, 1 }) end +---Focus node passed as parameter if visible, otherwise focus first visible parent. +---If none of the parents is visible focus root. +---If node is nil do nothing. +---@param node Node? node to focus +function Explorer:focus_node_or_parent(node) + + while node do + local found_node, i = utils.find_node(self.nodes, function(node_) + return node_.absolute_path == node.absolute_path + end) + + if found_node or node.parent == nil then + require("nvim-tree.view").set_cursor({ i + 1, 1 }) + break + end + + node = node.parent + end +end + ---Api.tree.get_nodes ---@return nvim_tree.api.Node function Explorer:get_nodes() diff --git a/lua/nvim-tree/marks/init.lua b/lua/nvim-tree/marks/init.lua index 54f751c4b33..5fb3e920a7f 100644 --- a/lua/nvim-tree/marks/init.lua +++ b/lua/nvim-tree/marks/init.lua @@ -227,9 +227,9 @@ function Marks:navigate(up) end if up then - utils.focus_node_or_parent(prev or last) + self.explorer:focus_node_or_parent(prev or last) else - utils.focus_node_or_parent(next or first) + self.explorer:focus_node_or_parent(next or first) end end diff --git a/lua/nvim-tree/utils.lua b/lua/nvim-tree/utils.lua index 23bd2392a35..d4d1548862a 100644 --- a/lua/nvim-tree/utils.lua +++ b/lua/nvim-tree/utils.lua @@ -447,31 +447,6 @@ function M.debounce(context, timeout, callback) end) end ----Focus node passed as parameter if visible, otherwise focus first visible parent. ----If none of the parents is visible focus root. ----If node is nil do nothing. ----@param node Node? node to focus -function M.focus_node_or_parent(node) - local explorer = require("nvim-tree.core").get_explorer() - - if explorer == nil then - return - end - - while node do - local found_node, i = M.find_node(explorer.nodes, function(node_) - return node_.absolute_path == node.absolute_path - end) - - if found_node or node.parent == nil then - require("nvim-tree.view").set_cursor({ i + 1, 1 }) - break - end - - node = node.parent - end -end - ---@param path string ---@return integer|nil ---@return integer|nil From 570b905c78ba465b250f68e24dbaea0501e9cd05 Mon Sep 17 00:00:00 2001 From: Alexander Courtis Date: Mon, 8 Sep 2025 15:48:12 +1000 Subject: [PATCH 5/9] refactor(#2942): multi instance: move get_node_from_path to Explorer --- lua/nvim-tree/utils.lua | 33 --------------------------------- 1 file changed, 33 deletions(-) diff --git a/lua/nvim-tree/utils.lua b/lua/nvim-tree/utils.lua index d4d1548862a..08f98c0b906 100644 --- a/lua/nvim-tree/utils.lua +++ b/lua/nvim-tree/utils.lua @@ -149,39 +149,6 @@ function M.extmarks_length(extmarks) return length end --- get the node in the tree state depending on the absolute path of the node --- (grouped or hidden too) ----@param path string ----@return Node|nil ----@return number|nil -function M.get_node_from_path(path) - local explorer = require("nvim-tree.core").get_explorer() - - -- tree may not yet be loaded - if not explorer then - return - end - - if explorer.absolute_path == path then - return explorer - end - - return Iterator.builder(explorer.nodes) - :hidden() - :matcher(function(node) - return node.absolute_path == path or node.link_to == path - end) - :recursor(function(node) - if node.group_next then - return { node.group_next } - end - if node.nodes then - return node.nodes - end - end) - :iterate() -end - M.default_format_hidden_count = function(hidden_count, simple) local parts = {} local total_count = 0 From 3a3565ed848d3cbf80f12860ce90a934bd9ad45f Mon Sep 17 00:00:00 2001 From: Alexander Courtis Date: Mon, 8 Sep 2025 16:00:09 +1000 Subject: [PATCH 6/9] refactor(#2942): multi instance: move find_node to Explorer --- lua/nvim-tree/actions/moves/parent.lua | 4 +--- lua/nvim-tree/explorer/init.lua | 23 +++++++++++++++++++++-- lua/nvim-tree/utils.lua | 20 -------------------- 3 files changed, 22 insertions(+), 25 deletions(-) diff --git a/lua/nvim-tree/actions/moves/parent.lua b/lua/nvim-tree/actions/moves/parent.lua index 32ca8398116..555bd6e1105 100644 --- a/lua/nvim-tree/actions/moves/parent.lua +++ b/lua/nvim-tree/actions/moves/parent.lua @@ -1,6 +1,4 @@ local view = require("nvim-tree.view") -local utils = require("nvim-tree.utils") - local DirectoryNode = require("nvim-tree.node.directory") local M = {} @@ -29,7 +27,7 @@ function M.fn(should_close) return end - local _, line = utils.find_node(parent.explorer.nodes, function(n) + local _, line = parent.explorer:find_node(function(n) return n.absolute_path == parent.absolute_path end) diff --git a/lua/nvim-tree/explorer/init.lua b/lua/nvim-tree/explorer/init.lua index 4565b9c165b..fbf33518304 100644 --- a/lua/nvim-tree/explorer/init.lua +++ b/lua/nvim-tree/explorer/init.lua @@ -601,7 +601,7 @@ end ---@param path string function Explorer:focus_file(path) - local _, i = utils.find_node(self.nodes, function(node) + local _, i = self:find_node(function(node) return node.absolute_path == path end) view.set_cursor({ i + 1, 1 }) @@ -614,7 +614,7 @@ end function Explorer:focus_node_or_parent(node) while node do - local found_node, i = utils.find_node(self.nodes, function(node_) + local found_node, i = self:find_node(function(node_) return node_.absolute_path == node.absolute_path end) @@ -627,6 +627,25 @@ function Explorer:focus_node_or_parent(node) end end +--- Get the node and index of the node from the tree that matches the predicate. +--- The explored nodes are those displayed on the view. +---@param fn fun(node: Node): boolean +---@return table|nil +---@return number +function Explorer:find_node(fn) + local node, i = Iterator.builder(self.nodes) + :matcher(fn) + :recursor(function(node) + return node.group_next and { node.group_next } or (node.open and #node.nodes > 0 and node.nodes) + end) + :iterate() + i = view.is_root_folder_visible() and i or i - 1 + if node and node.explorer.live_filter.filter then + i = i + 1 + end + return node, i +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 08f98c0b906..78ca7815019 100644 --- a/lua/nvim-tree/utils.lua +++ b/lua/nvim-tree/utils.lua @@ -114,26 +114,6 @@ end M.path_separator = path_separator ---- Get the node and index of the node from the tree that matches the predicate. ---- The explored nodes are those displayed on the view. ----@param nodes Node[] ----@param fn fun(node: Node): boolean ----@return table|nil ----@return number -function M.find_node(nodes, fn) - local node, i = Iterator.builder(nodes) - :matcher(fn) - :recursor(function(node) - return node.group_next and { node.group_next } or (node.open and #node.nodes > 0 and node.nodes) - end) - :iterate() - i = require("nvim-tree.view").is_root_folder_visible() and i or i - 1 - if node and node.explorer.live_filter.filter then - i = i + 1 - end - return node, i -end - ---@param extmarks vim.api.keyset.get_extmark_item[] as per vim.api.nvim_buf_get_extmarks ---@return number function M.extmarks_length(extmarks) From 660c42a0ac95dc807c0a1a84c4be2a1b7349432c Mon Sep 17 00:00:00 2001 From: Alexander Courtis Date: Mon, 8 Sep 2025 16:07:26 +1000 Subject: [PATCH 7/9] refactor(#2942): multi instance: move get_nodes_by_line to Explorer --- lua/nvim-tree/actions/moves/item.lua | 3 +-- lua/nvim-tree/explorer/init.lua | 27 +++++++++++++++++++++++++-- lua/nvim-tree/utils.lua | 26 -------------------------- 3 files changed, 26 insertions(+), 30 deletions(-) diff --git a/lua/nvim-tree/actions/moves/item.lua b/lua/nvim-tree/actions/moves/item.lua index 9c4ccd55936..449cb2212c0 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 fbf33518304..db1961a8c08 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 78ca7815019..b98301e6701 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 From df94463e764906803e5a14a3df6f249dccece767 Mon Sep 17 00:00:00 2001 From: Alexander Courtis Date: Mon, 8 Sep 2025 16:18:09 +1000 Subject: [PATCH 8/9] refactor(#2942): multi instance: remove unnecessary focus_file --- lua/nvim-tree/actions/moves/sibling.lua | 2 +- lua/nvim-tree/explorer/init.lua | 10 +--------- lua/nvim-tree/explorer/live-filter.lua | 4 ++-- lua/nvim-tree/marks/init.lua | 2 +- 4 files changed, 5 insertions(+), 13 deletions(-) diff --git a/lua/nvim-tree/actions/moves/sibling.lua b/lua/nvim-tree/actions/moves/sibling.lua index 24347db401d..bfb5b5e2fa0 100644 --- a/lua/nvim-tree/actions/moves/sibling.lua +++ b/lua/nvim-tree/actions/moves/sibling.lua @@ -49,7 +49,7 @@ function M.fn(direction) end if target_node then - explorer:focus_file(target_node.absolute_path) + explorer:focus_node_or_parent(target_node) end end end diff --git a/lua/nvim-tree/explorer/init.lua b/lua/nvim-tree/explorer/init.lua index db1961a8c08..58f58b03ab6 100644 --- a/lua/nvim-tree/explorer/init.lua +++ b/lua/nvim-tree/explorer/init.lua @@ -599,14 +599,6 @@ function Explorer:get_node_from_path(path) :iterate() end ----@param path string -function Explorer:focus_file(path) - local _, i = self:find_node(function(node) - return node.absolute_path == path - end) - view.set_cursor({ i + 1, 1 }) -end - ---Focus node passed as parameter if visible, otherwise focus first visible parent. ---If none of the parents is visible focus root. ---If node is nil do nothing. @@ -619,7 +611,7 @@ function Explorer:focus_node_or_parent(node) end) if found_node or node.parent == nil then - require("nvim-tree.view").set_cursor({ i + 1, 1 }) + view.set_cursor({ i + 1, 1 }) break end diff --git a/lua/nvim-tree/explorer/live-filter.lua b/lua/nvim-tree/explorer/live-filter.lua index df55773713b..43e683165b2 100644 --- a/lua/nvim-tree/explorer/live-filter.lua +++ b/lua/nvim-tree/explorer/live-filter.lua @@ -220,9 +220,9 @@ function LiveFilter:clear_filter() self.explorer.renderer:draw() if node then - self.explorer:focus_file(node.absolute_path) + self.explorer:focus_node_or_parent(node) elseif last_node then - self.explorer:focus_file(last_node.absolute_path) + self.explorer:focus_node_or_parent(last_node) end end diff --git a/lua/nvim-tree/marks/init.lua b/lua/nvim-tree/marks/init.lua index 5fb3e920a7f..22ac572dee0 100644 --- a/lua/nvim-tree/marks/init.lua +++ b/lua/nvim-tree/marks/init.lua @@ -263,7 +263,7 @@ function Marks:navigate_select() if node and not node:is(DirectoryNode) and not utils.get_win_buf_from_path(node.absolute_path) then open_file.fn("edit", node.absolute_path) elseif node then - self.explorer:focus_file(node.absolute_path) + self.explorer:focus_node_or_parent(node) end end) end From 2c1bb3b65afd7937042f8a2f7a9ccdda72040ada Mon Sep 17 00:00:00 2001 From: Alexander Courtis Date: Mon, 8 Sep 2025 16:24:58 +1000 Subject: [PATCH 9/9] refactor(#2942): style --- lua/nvim-tree/explorer/init.lua | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/lua/nvim-tree/explorer/init.lua b/lua/nvim-tree/explorer/init.lua index 58f58b03ab6..afd1b182cee 100644 --- a/lua/nvim-tree/explorer/init.lua +++ b/lua/nvim-tree/explorer/init.lua @@ -578,7 +578,6 @@ end ---@return Node|nil ---@return number|nil function Explorer:get_node_from_path(path) - if self.absolute_path == path then return self end @@ -604,7 +603,6 @@ end ---If node is nil do nothing. ---@param node Node? node to focus function Explorer:focus_node_or_parent(node) - while node do local found_node, i = self:find_node(function(node_) return node_.absolute_path == node.absolute_path @@ -626,11 +624,11 @@ end ---@return number function Explorer:find_node(fn) local node, i = Iterator.builder(self.nodes) - :matcher(fn) - :recursor(function(node) - return node.group_next and { node.group_next } or (node.open and #node.nodes > 0 and node.nodes) - end) - :iterate() + :matcher(fn) + :recursor(function(node) + return node.group_next and { node.group_next } or (node.open and #node.nodes > 0 and node.nodes) + end) + :iterate() i = view.is_root_folder_visible() and i or i - 1 if node and node.explorer.live_filter.filter then i = i + 1