fix(#1961): stop unnecessary find file refreshes, avoid find file refresh cycles (#2010)

This commit is contained in:
Alexander Courtis 2023-02-21 10:34:01 +11:00 committed by GitHub
parent 66c15afd13
commit 9c97e6449b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 13 additions and 5 deletions

View File

@ -30,8 +30,10 @@ function M.fn(fname)
local profile = log.profile_start("find file %s", fname_real)
-- we cannot wait for watchers
reload.refresh_nodes_for_path(vim.fn.fnamemodify(fname_real, ":h"))
-- we cannot wait for watchers to populate a new node
if utils.get_node_from_path(fname_real) == nil then
reload.refresh_nodes_for_path(vim.fn.fnamemodify(fname_real, ":h"))
end
local line = core.get_nodes_starting_line()

View File

@ -166,6 +166,9 @@ function M.refresh_nodes_for_path(path)
local profile = log.profile_start("refresh_nodes_for_path %s", path)
-- avoids cycles
local absolute_paths_refreshed = {}
NodeIterator.builder({ explorer })
:hidden()
:recursor(function(node)
@ -177,10 +180,13 @@ function M.refresh_nodes_for_path(path)
end
end)
:applier(function(node)
local abs_contains = node.absolute_path and path:match("^" .. node.absolute_path)
local link_contains = node.link_to and path:match("^" .. node.link_to)
local abs_contains = node.absolute_path and path:find(node.absolute_path, 1, true) == 1
local link_contains = node.link_to and path:find(node.link_to, 1, true) == 1
if abs_contains or link_contains then
M.refresh_node(node)
if not absolute_paths_refreshed[node.absolute_path] then
absolute_paths_refreshed[node.absolute_path] = true
M.refresh_node(node)
end
end
end)
:iterate()