Skip to content

fix(api): find_file doesn't work when group_empty option is enabled #2100

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 4 commits into from
Apr 29, 2023
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
10 changes: 7 additions & 3 deletions lua/nvim-tree/actions/finders/find-file.lua
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,9 @@ function M.fn(path)
return node.absolute_path == path_real or node.link_to == path_real
end)
:applier(function(node)
line = line + 1
if not node.group_next then
line = line + 1
end

if vim.tbl_contains(absolute_paths_searched, node.absolute_path) then
return
Expand All @@ -55,14 +57,16 @@ function M.fn(path)
local link_match = node.link_to and vim.startswith(path_real, node.link_to .. utils.path_separator)

if abs_match or link_match then
node.open = true
if not node.group_next then
node.open = true
end
if #node.nodes == 0 then
core.get_explorer():expand(node)
end
end
end)
:recursor(function(node)
return node.open and node.nodes
return node.group_next and { node.group_next } or (node.open and #node.nodes > 0 and node.nodes)
end)
:iterate()

Expand Down
10 changes: 3 additions & 7 deletions lua/nvim-tree/actions/moves/parent.lua
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,21 @@ local renderer = require "nvim-tree.renderer"
local view = require "nvim-tree.view"
local utils = require "nvim-tree.utils"
local core = require "nvim-tree.core"
local lib = require "nvim-tree.lib"

local M = {}

function M.fn(should_close)
should_close = should_close or false

return function(node)
node = lib.get_last_group_node(node)
if should_close and node.open then
node.open = false
return renderer.draw()
end

local parent = node.parent

if renderer.config.group_empty and parent then
while parent.parent and parent.parent.group_next do
parent = parent.parent
end
end
local parent = utils.get_parent_of_group(node).parent

if not parent or not parent.parent then
return view.set_cursor { 1, 0 }
Expand Down
2 changes: 1 addition & 1 deletion lua/nvim-tree/actions/tree-modifiers/collapse-all.lua
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ function M.fn(keep_buffers)
end
end)
:recursor(function(n)
return n.nodes
return n.group_next and { n.group_next } or n.nodes
end)
:iterate()

Expand Down
5 changes: 4 additions & 1 deletion lua/nvim-tree/actions/tree-modifiers/expand-all.lua
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ local core = require "nvim-tree.core"
local renderer = require "nvim-tree.renderer"
local Iterator = require "nvim-tree.iterators.node-iterator"
local notify = require "nvim-tree.notify"
local lib = require "nvim-tree.lib"

local M = {}

Expand All @@ -15,6 +16,7 @@ local function to_lookup_table(list)
end

local function expand(node)
node = lib.get_last_group_node(node)
node.open = true
if #node.nodes == 0 then
core.get_explorer():expand(node)
Expand Down Expand Up @@ -45,7 +47,8 @@ local function gen_iterator()
end
end)
:recursor(function(node)
return expansion_count < M.MAX_FOLDER_DISCOVERY and node.open and node.nodes
return expansion_count < M.MAX_FOLDER_DISCOVERY
and (node.group_next and { node.group_next } or (node.open and node.nodes))
end)
:iterate()

Expand Down
4 changes: 3 additions & 1 deletion lua/nvim-tree/iterators/node-iterator.lua
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,9 @@ function NodeIterator:iterate()
local function iter(nodes)
for _, node in ipairs(nodes) do
if self._filter_hidden(node) then
iteration_count = iteration_count + 1
if not node.group_next then
iteration_count = iteration_count + 1
end
if self._match(node) then
return node, iteration_count
end
Expand Down
4 changes: 3 additions & 1 deletion lua/nvim-tree/lib.lua
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,6 @@ function M.get_last_group_node(node)
end

function M.expand_or_collapse(node)
node.open = not node.open
if node.has_children then
node.has_children = false
end
Expand All @@ -90,6 +89,9 @@ function M.expand_or_collapse(node)
core.get_explorer():expand(node)
end

node = M.get_last_group_node(node)
node.open = not node.open

renderer.draw()
end

Expand Down
2 changes: 2 additions & 0 deletions lua/nvim-tree/renderer/builder.lua
Original file line number Diff line number Diff line change
Expand Up @@ -341,6 +341,8 @@ function Builder:_build_line(node, idx, num_children, unloaded_bufnr)

self.index = self.index + 1

node = require("nvim-tree.lib").get_last_group_node(node)

if node.open then
self.depth = self.depth + 1
self:build(node, unloaded_bufnr)
Expand Down
7 changes: 5 additions & 2 deletions lua/nvim-tree/utils.lua
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ function M.find_node(nodes, fn)
local node, i = Iterator.builder(nodes)
:matcher(fn)
:recursor(function(node)
return node.open and #node.nodes > 0 and node.nodes
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
Expand Down Expand Up @@ -146,11 +146,14 @@ function M.get_nodes_by_line(nodes_all, 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.open == true and node.nodes
return node.group_next and { node.group_next } or (node.open and #node.nodes > 0 and node.nodes)
end)
:iterate()

Expand Down