From e82db1c44d7dbe444737470af68d44239d78d429 Mon Sep 17 00:00:00 2001 From: Alexander Courtis Date: Sun, 27 Oct 2024 14:37:59 +1100 Subject: [PATCH] chore: resolve undefined-field --- lua/nvim-tree/git/utils.lua | 45 --------------------------- lua/nvim-tree/node/directory-link.lua | 23 ++++++++++---- lua/nvim-tree/node/directory.lua | 17 ++++++++-- lua/nvim-tree/node/file-link.lua | 15 +++++---- lua/nvim-tree/node/file.lua | 8 +++-- 5 files changed, 46 insertions(+), 62 deletions(-) diff --git a/lua/nvim-tree/git/utils.lua b/lua/nvim-tree/git/utils.lua index 2faf0642..8caaf73a 100644 --- a/lua/nvim-tree/git/utils.lua +++ b/lua/nvim-tree/git/utils.lua @@ -127,51 +127,6 @@ function M.file_status_to_dir_status(status, cwd) return r end ----Git file status for an absolute path with optional fallback ----@param parent_ignored boolean ----@param status table? ----@param path string ----@param path_fallback string? ----@return GitStatus -function M.git_status_file(parent_ignored, status, path, path_fallback) - ---@type GitStatus - local st = {} - - if parent_ignored then - st.file = "!!" - elseif status and status.files then - st.file = status.files[path] or status.files[path_fallback] - end - - return st -end - ----Git file and directory status for an absolute path with optional file fallback ----@param parent_ignored boolean ----@param status table? ----@param path string ----@param path_file string? alternative file path when no other file status ----@return GitStatus? -function M.git_status_dir(parent_ignored, status, path, path_file) - ---@type GitStatus? - local st - - if parent_ignored then - st = {} - st.file = "!!" - elseif status then - st = {} - st.file = status.files and (status.files[path] or status.files[path_file]) - if status.dirs then - st.dir = {} - st.dir.direct = status.dirs.direct and status.dirs.direct[path] - st.dir.indirect = status.dirs.indirect and status.dirs.indirect[path] - end - end - - return st -end - function M.setup(opts) if opts.git.cygwin_support then M.use_cygpath = vim.fn.executable("cygpath") == 1 diff --git a/lua/nvim-tree/node/directory-link.lua b/lua/nvim-tree/node/directory-link.lua index ecf7e3f1..42faca64 100644 --- a/lua/nvim-tree/node/directory-link.lua +++ b/lua/nvim-tree/node/directory-link.lua @@ -1,5 +1,3 @@ -local git_utils = require("nvim-tree.git.utils") - local DirectoryNode = require("nvim-tree.node.directory") ---@class (exact) DirectoryLinkNode: DirectoryNode @@ -36,11 +34,24 @@ function DirectoryLinkNode:destroy() DirectoryNode.destroy(self) end ------Update the directory GitStatus of link target and the file status of the link itself ------@param parent_ignored boolean ------@param status table|nil +---Update the directory GitStatus of link target and the file status of the link itself +---@param parent_ignored boolean +---@param status table|nil function DirectoryLinkNode:update_git_status(parent_ignored, status) - self.git_status = git_utils.git_status_dir(parent_ignored, status, self.link_to, self.absolute_path) + if parent_ignored then + self.git_status = {} + self.git_status.file = "!!" + elseif status then + self.git_status = {} + self.git_status.file = status.files and (status.files[self.link_to] or status.files[self.absolute_path]) + if status.dirs then + self.git_status.dir = {} + self.git_status.dir.direct = status.dirs.direct and status.dirs.direct[self.absolute_path] + self.git_status.dir.indirect = status.dirs.indirect and status.dirs.indirect[self.absolute_path] + end + else + self.git_status = nil + end end ---Create a sanitized partial copy of a node, populating children recursively. diff --git a/lua/nvim-tree/node/directory.lua b/lua/nvim-tree/node/directory.lua index 2fef08ef..9c019ec4 100644 --- a/lua/nvim-tree/node/directory.lua +++ b/lua/nvim-tree/node/directory.lua @@ -1,5 +1,3 @@ -local git_utils = require("nvim-tree.git.utils") - local Node = require("nvim-tree.node") ---@class (exact) DirectoryNode: Node @@ -69,7 +67,20 @@ end ---@param parent_ignored boolean ---@param status table|nil function DirectoryNode:update_git_status(parent_ignored, status) - self.git_status = git_utils.git_status_dir(parent_ignored, status, self.absolute_path, nil) + if parent_ignored then + self.git_status = {} + self.git_status.file = "!!" + elseif status then + self.git_status = {} + self.git_status.file = status.files and status.files[self.absolute_path] + if status.dirs then + self.git_status.dir = {} + self.git_status.dir.direct = status.dirs.direct and status.dirs.direct[self.absolute_path] + self.git_status.dir.indirect = status.dirs.indirect and status.dirs.indirect[self.absolute_path] + end + else + self.git_status = nil + end end ---@return string[]? xy short-format statuses diff --git a/lua/nvim-tree/node/file-link.lua b/lua/nvim-tree/node/file-link.lua index 5f9c6920..e1fd9bfa 100644 --- a/lua/nvim-tree/node/file-link.lua +++ b/lua/nvim-tree/node/file-link.lua @@ -1,5 +1,3 @@ -local git_utils = require("nvim-tree.git.utils") - local FileNode = require("nvim-tree.node.file") ---@class (exact) FileLinkNode: FileNode @@ -32,11 +30,16 @@ function FileLinkNode:destroy() FileNode.destroy(self) end ------Update the GitStatus of the target otherwise the link itself ------@param parent_ignored boolean ------@param status table|nil +---Update the GitStatus of the target otherwise the link itself +---@param parent_ignored boolean +---@param status table|nil function FileLinkNode:update_git_status(parent_ignored, status) - self.git_status = git_utils.git_status_file(parent_ignored, status, self.link_to, self.absolute_path) + self.git_status = {} + if parent_ignored then + self.git_status.file = "!!" + elseif status and status.files then + self.git_status.file = status.files[self.link_to] or status.files[self.absolute_path] + end end ---Create a sanitized partial copy of a node diff --git a/lua/nvim-tree/node/file.lua b/lua/nvim-tree/node/file.lua index 52c5febc..b411ddef 100644 --- a/lua/nvim-tree/node/file.lua +++ b/lua/nvim-tree/node/file.lua @@ -1,4 +1,3 @@ -local git_utils = require("nvim-tree.git.utils") local utils = require("nvim-tree.utils") local Node = require("nvim-tree.node") @@ -44,7 +43,12 @@ end ---@param parent_ignored boolean ---@param status table|nil function FileNode:update_git_status(parent_ignored, status) - self.git_status = git_utils.git_status_file(parent_ignored, status, self.absolute_path, nil) + self.git_status = {} + if parent_ignored then + self.git_status.file = "!!" + elseif status and status.files then + self.git_status.file = status.files[self.absolute_path] + end end ---@return string[]? xy short-format statuses