Skip to content

Commit

Permalink
fix(#2945): stack overflow on api.git.reload or fugitive event with w…
Browse files Browse the repository at this point in the history
…atchers disabled (#2949)

* Reapply "refactor(#2871, #2886): multi instance: node classes created (#2916)"

This reverts commit 50e9194.

* fix(#2945): stack overflow on api.git.reload or fugitive event
  • Loading branch information
alex-courtis authored Oct 11, 2024
1 parent 50e9194 commit 5ad8762
Show file tree
Hide file tree
Showing 43 changed files with 835 additions and 742 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ jobs:
strategy:
matrix:
nvim_version: [ stable, nightly ]
luals_version: [ 3.10.5 ]
luals_version: [ 3.11.0 ]

steps:
- uses: actions/checkout@v4
Expand Down
4 changes: 2 additions & 2 deletions lua/nvim-tree.lua
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ function M.place_cursor_on_node()
if not node or node.name == ".." then
return
end
node = utils.get_parent_of_group(node)
node = node:get_parent_of_group()

local line = vim.api.nvim_get_current_line()
local cursor = vim.api.nvim_win_get_cursor(0)
Expand Down Expand Up @@ -854,7 +854,7 @@ function M.setup(conf)
require("nvim-tree.keymap").setup(opts)
require("nvim-tree.appearance").setup()
require("nvim-tree.diagnostics").setup(opts)
require("nvim-tree.explorer").setup(opts)
require("nvim-tree.explorer"):setup(opts)
require("nvim-tree.git").setup(opts)
require("nvim-tree.git.utils").setup(opts)
require("nvim-tree.view").setup(opts)
Expand Down
8 changes: 4 additions & 4 deletions lua/nvim-tree/actions/fs/clipboard.lua
Original file line number Diff line number Diff line change
Expand Up @@ -217,10 +217,10 @@ end
---@param action ACTION
---@param action_fn fun(source: string, dest: string)
function Clipboard:do_paste(node, action, action_fn)
node = lib.get_last_group_node(node)
local explorer = core.get_explorer()
if node.name == ".." and explorer then
node = explorer
if node.name == ".." then
node = self.explorer
else
node = node:last_group_node()
end
local clip = self.data[action]
if #clip == 0 then
Expand Down
6 changes: 3 additions & 3 deletions lua/nvim-tree/actions/fs/create-file.lua
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
local utils = require("nvim-tree.utils")
local events = require("nvim-tree.events")
local lib = require("nvim-tree.lib")
local core = require("nvim-tree.core")
local notify = require("nvim-tree.notify")

Expand Down Expand Up @@ -40,21 +39,22 @@ local function get_containing_folder(node)
return node.absolute_path:sub(0, -node_name_size - 1)
end

---@param node Node|nil
---@param node Node?
function M.fn(node)
local cwd = core.get_cwd()
if cwd == nil then
return
end

node = node and lib.get_last_group_node(node)
if not node or node.name == ".." then
node = {
absolute_path = cwd,
name = "",
nodes = core.get_explorer().nodes,
open = true,
}
else
node = node:last_group_node()
end

local containing_folder = get_containing_folder(node)
Expand Down
2 changes: 1 addition & 1 deletion lua/nvim-tree/actions/fs/rename-file.lua
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ function M.fn(default_modifier)
return
end

node = lib.get_last_group_node(node)
node = node:last_group_node()
if node.name == ".." then
return
end
Expand Down
7 changes: 3 additions & 4 deletions lua/nvim-tree/actions/moves/item.lua
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,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 explorer_node = require("nvim-tree.explorer.node")
local diagnostics = require("nvim-tree.diagnostics")

local M = {}
Expand All @@ -16,7 +15,7 @@ local MAX_DEPTH = 100
---@return boolean
local function status_is_valid(node, what, skip_gitignored)
if what == "git" then
local git_status = explorer_node.get_git_status(node)
local git_status = node:get_git_status()
return git_status ~= nil and (not skip_gitignored or git_status[1] ~= "!!")
elseif what == "diag" then
local diag_status = diagnostics.get_diag_status(node)
Expand Down Expand Up @@ -75,7 +74,7 @@ local function expand_node(node)
if not node.open then
-- Expand the node.
-- Should never collapse since we checked open.
lib.expand_or_collapse(node)
node:expand_or_collapse()
end
end

Expand All @@ -98,7 +97,7 @@ local function move_next_recursive(what, skip_gitignored)
valid = status_is_valid(node_init, what, skip_gitignored)
end
if node_init.nodes ~= nil and valid and not node_init.open then
lib.expand_or_collapse(node_init)
node_init:expand_or_collapse()
end

move("next", what, skip_gitignored)
Expand Down
5 changes: 2 additions & 3 deletions lua/nvim-tree/actions/moves/parent.lua
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
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 = {}

Expand All @@ -12,7 +11,7 @@ function M.fn(should_close)

return function(node)
local explorer = core.get_explorer()
node = lib.get_last_group_node(node)
node = node:last_group_node()
if should_close and node.open then
node.open = false
if explorer then
Expand All @@ -21,7 +20,7 @@ function M.fn(should_close)
return
end

local parent = utils.get_parent_of_group(node).parent
local parent = node:get_parent_of_group().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/moves/sibling.lua
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ function M.fn(direction)
local first, last, next, prev = nil, nil, nil, nil
local found = false
local parent = node.parent or core.get_explorer()
Iterator.builder(parent.nodes)
Iterator.builder(parent and parent.nodes or {})
:recursor(function()
return nil
end)
Expand Down
9 changes: 4 additions & 5 deletions lua/nvim-tree/actions/tree/modifiers/expand-all.lua
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
local core = require("nvim-tree.core")
local Iterator = require("nvim-tree.iterators.node-iterator")
local notify = require("nvim-tree.notify")
local lib = require("nvim-tree.lib")

local M = {}

Expand All @@ -18,7 +17,7 @@ end

---@param node Node
local function expand(node)
node = lib.get_last_group_node(node)
node = node:last_group_node()
node.open = true
if #node.nodes == 0 then
core.get_explorer():expand(node)
Expand Down Expand Up @@ -62,10 +61,10 @@ local function gen_iterator()
end
end

---@param base_node table
function M.fn(base_node)
---@param node Node
function M.fn(node)
local explorer = core.get_explorer()
local node = base_node.nodes and base_node or explorer
node = node.nodes and node or explorer
if gen_iterator()(node) then
notify.warn("expansion iteration was halted after " .. M.MAX_FOLDER_DISCOVERY .. " discovered folders")
end
Expand Down
6 changes: 3 additions & 3 deletions lua/nvim-tree/api.lua
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ Api.tree.change_root_to_node = wrap_node(function(node)
if node.name == ".." then
actions.root.change_dir.fn("..")
elseif node.nodes ~= nil then
actions.root.change_dir.fn(lib.get_last_group_node(node).absolute_path)
actions.root.change_dir.fn(node:last_group_node().absolute_path)
end
end)

Expand Down Expand Up @@ -198,7 +198,7 @@ Api.fs.copy.basename = wrap_node(wrap_explorer_member("clipboard", "copy_basenam
Api.fs.copy.relative_path = wrap_node(wrap_explorer_member("clipboard", "copy_path"))

---@param mode string
---@param node table
---@param node Node
local function edit(mode, node)
local path = node.absolute_path
if node.link_to and not node.nodes then
Expand All @@ -214,7 +214,7 @@ local function open_or_expand_or_dir_up(mode, toggle_group)
if node.name == ".." then
actions.root.change_dir.fn("..")
elseif node.nodes then
lib.expand_or_collapse(node, toggle_group)
node:expand_or_collapse(toggle_group)
elseif not toggle_group then
edit(mode, node)
end
Expand Down
4 changes: 2 additions & 2 deletions lua/nvim-tree/buffers.lua
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ function M.reload_modified()
end
end

---@param node table
---@param node Node
---@return boolean
function M.is_modified(node)
return node
Expand All @@ -32,7 +32,7 @@ function M.is_modified(node)
end

---A buffer exists for the node's absolute path
---@param node table
---@param node Node
---@return boolean
function M.is_opened(node)
return node and vim.fn.bufloaded(node.absolute_path) > 0
Expand Down
2 changes: 1 addition & 1 deletion lua/nvim-tree/core.lua
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ function M.init(foldername)
if TreeExplorer then
TreeExplorer:destroy()
end
TreeExplorer = require("nvim-tree.explorer"):new(foldername)
TreeExplorer = require("nvim-tree.explorer"):create(foldername)
if not first_init_done then
events._dispatch_ready()
first_init_done = true
Expand Down
8 changes: 8 additions & 0 deletions lua/nvim-tree/enum.lua
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
local M = {}

---Must be synced with uv.fs_stat.result as it is compared with it
---@enum (key) NODE_TYPE
M.NODE_TYPE = {
directory = 1,
file = 2,
link = 4,
}

---Setup options for "highlight_*"
---@enum HL_POSITION
M.HL_POSITION = {
Expand Down
Loading

0 comments on commit 5ad8762

Please sign in to comment.