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:
@@ -2,6 +2,7 @@ local utils = require "nvim-tree.utils"
|
|||||||
local view = require "nvim-tree.view"
|
local view = require "nvim-tree.view"
|
||||||
local core = require "nvim-tree.core"
|
local core = require "nvim-tree.core"
|
||||||
local lib = require "nvim-tree.lib"
|
local lib = require "nvim-tree.lib"
|
||||||
|
local explorer_common = require "nvim-tree.explorer.common"
|
||||||
|
|
||||||
local M = {}
|
local M = {}
|
||||||
|
|
||||||
@@ -14,7 +15,7 @@ function M.fn(where, what)
|
|||||||
for line, node in pairs(nodes_by_line) do
|
for line, node in pairs(nodes_by_line) do
|
||||||
local valid = false
|
local valid = false
|
||||||
if what == "git" then
|
if what == "git" then
|
||||||
valid = node.git_status ~= nil
|
valid = explorer_common.shows_git_status(node)
|
||||||
elseif what == "diag" then
|
elseif what == "diag" then
|
||||||
valid = node.diag_status ~= nil
|
valid = node.diag_status ~= nil
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -10,9 +10,7 @@ local function get_dir_git_status(parent_ignored, status, absolute_path)
|
|||||||
return file_status
|
return file_status
|
||||||
end
|
end
|
||||||
|
|
||||||
if M.config.git.show_on_dirs then
|
return status.dirs and status.dirs[absolute_path]
|
||||||
return status.dirs and status.dirs[absolute_path]
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
local function get_git_status(parent_ignored, status, absolute_path)
|
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
|
||||||
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)
|
function M.node_destroy(node)
|
||||||
if not node then
|
if not node then
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
local notify = require "nvim-tree.notify"
|
local notify = require "nvim-tree.notify"
|
||||||
|
local explorer_common = require "nvim-tree.explorer.common"
|
||||||
|
|
||||||
local M = {
|
local M = {
|
||||||
SIGN_GROUP = "NvimTreeGitSigns",
|
SIGN_GROUP = "NvimTreeGitSigns",
|
||||||
@@ -75,16 +76,12 @@ local function warn_status(git_status)
|
|||||||
)
|
)
|
||||||
end
|
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 function get_icons_(node)
|
||||||
local git_status = node.git_status
|
if not explorer_common.shows_git_status(node) then
|
||||||
if not show_git(node) then
|
|
||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local git_status = node.git_status
|
||||||
local icons = M.git_icons[git_status]
|
local icons = M.git_icons[git_status]
|
||||||
if not icons then
|
if not icons then
|
||||||
if not M.config.highlight_git then
|
if not M.config.highlight_git then
|
||||||
@@ -141,7 +138,7 @@ end
|
|||||||
|
|
||||||
local function get_highlight_(node)
|
local function get_highlight_(node)
|
||||||
local git_status = node.git_status
|
local git_status = node.git_status
|
||||||
if not show_git(node) then
|
if not explorer_common.shows_git_status(node) then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user