diff --git a/lua/nvim-tree/actions/moves/item.lua b/lua/nvim-tree/actions/moves/item.lua index 3eb74b807a2..b5646193346 100644 --- a/lua/nvim-tree/actions/moves/item.lua +++ b/lua/nvim-tree/actions/moves/item.lua @@ -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 diff --git a/lua/nvim-tree/explorer/common.lua b/lua/nvim-tree/explorer/common.lua index c3bed863e1a..71eae8af608 100644 --- a/lua/nvim-tree/explorer/common.lua +++ b/lua/nvim-tree/explorer/common.lua @@ -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 diff --git a/lua/nvim-tree/renderer/components/git.lua b/lua/nvim-tree/renderer/components/git.lua index 7b82d92ed4e..fae22803f30 100644 --- a/lua/nvim-tree/renderer/components/git.lua +++ b/lua/nvim-tree/renderer/components/git.lua @@ -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