feat(view): add filters.git_clean, filters.no_buffer (#1784)

* feat(view): add filters.git_clean

* feat(view): add filters.git_clean

* feat(view): add filters.no_buffer

* feat(view): filters.no_buffer misses unloaded, handles buffer in/out

* feat(view): filters.no_buffer matches directories specifically

* feat(view): filters.no_buffer clarify targets

* feat: add placeholder filters.diagnostics_ok, refactor filters

* feat(view): remove placeholder filters.diagnostics_ok
This commit is contained in:
Alexander Courtis
2022-12-10 15:55:33 +11:00
committed by GitHub
parent e49fa4e529
commit c5dc80c36b
12 changed files with 214 additions and 77 deletions

View File

@@ -34,7 +34,7 @@ local function update_parent_statuses(node, project, root)
end
end
function M.reload(node, status)
function M.reload(node, git_status, unloaded_bufnr)
local cwd = node.link_to or node.absolute_path
local handle = vim.loop.fs_scandir(cwd)
if type(handle) == "string" then
@@ -44,6 +44,8 @@ function M.reload(node, status)
local ps = log.profile_start("reload %s", node.absolute_path)
local filter_status = filters.prepare(git_status, unloaded_bufnr)
if node.group_next then
node.nodes = { node.group_next }
node.group_next = nil
@@ -71,7 +73,7 @@ function M.reload(node, status)
local abs = utils.path_join { cwd, name }
t = t or (fs_stat_cached(abs) or {}).type
if not filters.should_ignore(abs) and not filters.should_ignore_git(abs, status.files) then
if not filters.should_filter(abs, filter_status) then
child_names[abs] = true
-- Recreate node if type changes.
@@ -112,7 +114,7 @@ function M.reload(node, status)
end
node.nodes = vim.tbl_map(
update_status(nodes_by_path, node_ignored, status),
update_status(nodes_by_path, node_ignored, git_status),
vim.tbl_filter(function(n)
if child_names[n.absolute_path] then
return child_names[n.absolute_path]
@@ -127,7 +129,7 @@ function M.reload(node, status)
local child_folder_only = common.has_one_child_folder(node) and node.nodes[1]
if M.config.group_empty and not is_root and child_folder_only then
node.group_next = child_folder_only
local ns = M.reload(child_folder_only, status)
local ns = M.reload(child_folder_only, git_status)
node.nodes = ns or {}
log.profile_end(ps, "reload %s", node.absolute_path)
return ns