1786 git next prev land on dirs (#1787)

* Filtered dir with git status that are open when show_on_open_dir is false

* refactored for single source of truth of existence of git status on a node

Putting `has_git_status()` in `explorer.common` because that's where node.status is constructed
Or at least I think that's where it's constructed

* 1786 semantic nit

Co-authored-by: Alexander Courtis <alex@courtis.org>
This commit is contained in:
Richard Li 2022-12-03 14:39:00 +11:00 committed by GitHub
parent 07149daa0c
commit 9d9c5711dc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 23 additions and 11 deletions

View File

@ -2,6 +2,7 @@ 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_common = require "nvim-tree.explorer.common"
local M = {}
@ -14,7 +15,7 @@ function M.fn(where, what)
for line, node in pairs(nodes_by_line) do
local valid = false
if what == "git" then
valid = node.git_status ~= nil
valid = explorer_common.shows_git_status(node)
elseif what == "diag" then
valid = node.diag_status ~= nil
end

View File

@ -10,9 +10,7 @@ local function get_dir_git_status(parent_ignored, status, absolute_path)
return file_status
end
if M.config.git.show_on_dirs then
return status.dirs and status.dirs[absolute_path]
end
return status.dirs and status.dirs[absolute_path]
end
local function get_git_status(parent_ignored, status, absolute_path)
@ -41,6 +39,22 @@ function M.update_git_status(node, parent_ignored, status)
end
end
function M.shows_git_status(node)
if not node.git_status then
-- status doesn't exist
return false
elseif not node.nodes then
-- status exist and is a file
return true
elseif not node.open then
-- status exist, is a closed dir
return M.config.git.show_on_dirs
else
-- status exist, is a open dir
return M.config.git.show_on_dirs and M.config.git.show_on_open_dirs
end
end
function M.node_destroy(node)
if not node then
return

View File

@ -1,4 +1,5 @@
local notify = require "nvim-tree.notify"
local explorer_common = require "nvim-tree.explorer.common"
local M = {
SIGN_GROUP = "NvimTreeGitSigns",
@ -75,16 +76,12 @@ local function warn_status(git_status)
)
end
local function show_git(node)
return node.git_status and (not node.open or M.git_show_on_open_dirs)
end
local function get_icons_(node)
local git_status = node.git_status
if not show_git(node) then
if not explorer_common.shows_git_status(node) then
return nil
end
local git_status = node.git_status
local icons = M.git_icons[git_status]
if not icons then
if not M.config.highlight_git then
@ -141,7 +138,7 @@ end
local function get_highlight_(node)
local git_status = node.git_status
if not show_git(node) then
if not explorer_common.shows_git_status(node) then
return
end