chore: add type annotations to (almost) all functions

This commit is contained in:
Akmadan23
2023-11-24 12:01:24 +01:00
parent 46e1f776f0
commit fabea3376e
48 changed files with 438 additions and 83 deletions

View File

@@ -4,6 +4,9 @@ local find_file = require("nvim-tree.actions.finders.find-file").fn
local M = {}
---@param search_dir string|nil
---@param input_path string
---@return string|nil
local function search(search_dir, input_path)
local realpaths_searched = {}
@@ -11,6 +14,8 @@ local function search(search_dir, input_path)
return
end
---@param dir string
---@return string|nil
local function iter(dir)
local realpath, path, name, stat, handle, _

View File

@@ -20,6 +20,10 @@ local clipboard = {
copy = {},
}
---@param source string
---@param destination string
---@return boolean
---@return string|nil
local function do_copy(source, destination)
local source_stats, handle
local success, errmsg
@@ -81,6 +85,12 @@ local function do_copy(source, destination)
return true
end
---@param source string
---@param dest string
---@param action_type string
---@param action_fn fun(source: string, dest: string)
---@return boolean|nil -- success
---@return string|nil -- error message
local function do_single_paste(source, dest, action_type, action_fn)
local dest_stats
local success, errmsg, errcode
@@ -140,6 +150,8 @@ local function do_single_paste(source, dest, action_type, action_fn)
end
end
---@param node Node
---@param clip table
local function toggle(node, clip)
if node.name == ".." then
return
@@ -147,7 +159,8 @@ local function toggle(node, clip)
local notify_node = notify.render_path(node.absolute_path)
if utils.array_remove(clip, node) then
return notify.info(notify_node .. " removed from clipboard.")
notify.info(notify_node .. " removed from clipboard.")
return
end
table.insert(clip, node)
@@ -161,18 +174,23 @@ function M.clear_clipboard()
renderer.draw()
end
---@param node Node
function M.copy(node)
utils.array_remove(clipboard.cut, node)
toggle(node, clipboard.copy)
renderer.draw()
end
---@param node Node
function M.cut(node)
utils.array_remove(clipboard.copy, node)
toggle(node, clipboard.cut)
renderer.draw()
end
---@param node Node
---@param action_type string
---@param action_fn fun(source: string, dest: string)
local function do_paste(node, action_type, action_fn)
node = lib.get_last_group_node(node)
if node.name == ".." then
@@ -202,10 +220,14 @@ local function do_paste(node, action_type, action_fn)
clipboard[action_type] = {}
if not M.config.filesystem_watchers.enable then
return reloaders.reload_explorer()
reloaders.reload_explorer()
end
end
---@param source string
---@param destination string
---@return boolean
---@return string?
local function do_cut(source, destination)
log.line("copy_paste", "do_cut '%s' -> '%s'", source, destination)
@@ -225,12 +247,13 @@ local function do_cut(source, destination)
return true
end
---@param node Node
function M.paste(node)
if clipboard.cut[1] ~= nil then
return do_paste(node, "cut", do_cut)
do_paste(node, "cut", do_cut)
else
do_paste(node, "copy", do_copy)
end
return do_paste(node, "copy", do_copy)
end
function M.print_clipboard()
@@ -248,9 +271,10 @@ function M.print_clipboard()
end
end
return notify.info(table.concat(content, "\n") .. "\n")
notify.info(table.concat(content, "\n") .. "\n")
end
---@param content string
local function copy_to_clipboard(content)
local clipboard_name
if M.config.actions.use_system_clipboard == true then
@@ -264,28 +288,30 @@ local function copy_to_clipboard(content)
end
vim.api.nvim_exec_autocmds("TextYankPost", {})
return notify.info(string.format("Copied %s to %s clipboard!", content, clipboard_name))
notify.info(string.format("Copied %s to %s clipboard!", content, clipboard_name))
end
---@param node Node
function M.copy_filename(node)
return copy_to_clipboard(node.name)
copy_to_clipboard(node.name)
end
---@param node Node
function M.copy_path(node)
local absolute_path = node.absolute_path
local relative_path = utils.path_relative(absolute_path, core.get_cwd())
local content = node.nodes ~= nil and utils.path_add_trailing(relative_path) or relative_path
return copy_to_clipboard(content)
copy_to_clipboard(content)
end
function M.copy_absolute_path(node)
local absolute_path = node.absolute_path
local content = node.nodes ~= nil and utils.path_add_trailing(absolute_path) or absolute_path
return copy_to_clipboard(content)
copy_to_clipboard(content)
end
---Clipboard text highlight group and position when highlight_clipboard.
---@param node table
--- Clipboard text highlight group and position when highlight_clipboard.
---@param node Node
---@return HL_POSITION position none when clipboard empty
---@return string|nil group only when node present in clipboard
function M.get_highlight(node)

View File

@@ -8,6 +8,7 @@ local find_file = require("nvim-tree.actions.finders.find-file").fn
local M = {}
---@param file string
local function create_and_notify(file)
events._dispatch_will_create_file(file)
local ok, fd = pcall(vim.loop.fs_open, file, "w", 420)
@@ -19,6 +20,8 @@ local function create_and_notify(file)
events._dispatch_file_created(file)
end
---@param iter function iterable
---@return integer
local function get_num_nodes(iter)
local i = 0
for _ in iter do
@@ -27,6 +30,8 @@ local function get_num_nodes(iter)
return i
end
---@param node Node
---@return string
local function get_containing_folder(node)
if node.nodes ~= nil then
return utils.path_add_trailing(node.absolute_path)
@@ -35,6 +40,7 @@ local function get_containing_folder(node)
return node.absolute_path:sub(0, -node_name_size - 1)
end
---@param node Node|nil
function M.fn(node)
node = node and lib.get_last_group_node(node)
if not node or node.name == ".." then

View File

@@ -8,6 +8,7 @@ local M = {
config = {},
}
---@param windows table
local function close_windows(windows)
-- Prevent from closing when the win count equals 1 or 2,
-- where the win to remove could be the last opened.
@@ -23,6 +24,7 @@ local function close_windows(windows)
end
end
---@param absolute_path string
local function clear_buffer(absolute_path)
local bufs = vim.fn.getbufinfo { bufloaded = 1, buflisted = 1 }
for _, buf in pairs(bufs) do
@@ -44,10 +46,13 @@ local function clear_buffer(absolute_path)
end
end
---@param cwd string
---@return boolean|nil
local function remove_dir(cwd)
local handle = vim.loop.fs_scandir(cwd)
if type(handle) == "string" then
return notify.error(handle)
notify.error(handle)
return
end
while true do
@@ -75,20 +80,22 @@ local function remove_dir(cwd)
end
--- Remove a node, notify errors, dispatch events
--- @param node table
---@param node Node
function M.remove(node)
local notify_node = notify.render_path(node.absolute_path)
if node.nodes ~= nil and not node.link_to then
local success = remove_dir(node.absolute_path)
if not success then
return notify.error("Could not remove " .. notify_node)
notify.error("Could not remove " .. notify_node)
return
end
events._dispatch_folder_removed(node.absolute_path)
else
events._dispatch_will_remove_file(node.absolute_path)
local success = vim.loop.fs_unlink(node.absolute_path)
if not success then
return notify.error("Could not remove " .. notify_node)
notify.error("Could not remove " .. notify_node)
return
end
events._dispatch_file_removed(node.absolute_path)
clear_buffer(node.absolute_path)
@@ -96,6 +103,7 @@ function M.remove(node)
notify.info(notify_node .. " was properly removed.")
end
---@param node Node
function M.fn(node)
if node.name == ".." then
return

View File

@@ -20,6 +20,8 @@ local function err_fmt(from, to, reason)
return string.format("Cannot rename %s -> %s: %s", from, to, reason)
end
---@param node Node
---@param to string
function M.rename(node, to)
local notify_from = notify.render_path(node.absolute_path)
local notify_to = notify.render_path(to)
@@ -32,13 +34,16 @@ function M.rename(node, to)
events._dispatch_will_rename_node(node.absolute_path, to)
local success, err = vim.loop.fs_rename(node.absolute_path, to)
if not success then
return notify.warn(err_fmt(notify_from, notify_to, err))
notify.warn(err_fmt(notify_from, notify_to, err))
return
end
notify.info(string.format("%s -> %s", notify_from, notify_to))
utils.rename_loaded_buffers(node.absolute_path, to)
events._dispatch_node_renamed(node.absolute_path, to)
end
---@param default_modifier string|nil
---@return fun(node: Node, modifier: string)
function M.fn(default_modifier)
default_modifier = default_modifier or ":t"
@@ -53,7 +58,8 @@ function M.fn(default_modifier)
-- support for only specific modifiers have been implemented
if not ALLOWED_MODIFIERS[modifier] then
return notify.warn("Modifier " .. vim.inspect(modifier) .. " is not in allowed list : " .. table.concat(ALLOWED_MODIFIERS, ","))
notify.warn("Modifier " .. vim.inspect(modifier) .. " is not in allowed list : " .. table.concat(ALLOWED_MODIFIERS, ","))
return
end
node = lib.get_last_group_node(node)

View File

@@ -8,6 +8,7 @@ local M = {
local utils = require "nvim-tree.utils"
local events = require "nvim-tree.events"
---@param absolute_path string
local function clear_buffer(absolute_path)
local bufs = vim.fn.getbufinfo { bufloaded = 1, buflisted = 1 }
for _, buf in pairs(bufs) do
@@ -24,6 +25,7 @@ local function clear_buffer(absolute_path)
end
end
---@param node Node
function M.remove(node)
local binary = M.config.trash.cmd:gsub(" .*$", "")
if vim.fn.executable(binary) == 0 then
@@ -76,6 +78,7 @@ function M.remove(node)
end
end
---@param node Node
function M.fn(node)
if node.name == ".." then
return

View File

@@ -6,6 +6,9 @@ local explorer_node = require "nvim-tree.explorer.node"
local M = {}
---@param where string
---@param what string
---@return fun()
function M.fn(where, what)
return function()
local node_cur = lib.get_node_at_cursor()

View File

@@ -6,6 +6,8 @@ local lib = require "nvim-tree.lib"
local M = {}
---@param should_close boolean|nil
---@return fun(node: Node): boolean|nil
function M.fn(should_close)
should_close = should_close or false

View File

@@ -4,6 +4,8 @@ local Iterator = require "nvim-tree.iterators.node-iterator"
local M = {}
---@param direction string
---@return fun(node: Node): nil
function M.fn(direction)
return function(node)
if node.name == ".." or not direction then

View File

@@ -2,6 +2,8 @@ local utils = require "nvim-tree.utils"
local M = {}
---@param node Node
---@return table
local function get_formatted_lines(node)
local stats = node.fs_stat
local fpath = " fullpath: " .. node.absolute_path
@@ -21,6 +23,7 @@ end
local current_popup = nil
---@param node Node
local function setup_window(node)
local lines = get_formatted_lines(node)
@@ -52,6 +55,7 @@ function M.close_popup()
end
end
---@param node Node
function M.toggle_file_info(node)
if node.name == ".." then
return

View File

@@ -14,7 +14,7 @@ local function get_user_input_char()
return vim.fn.nr2char(c)
end
---Get all windows in the current tabpage that aren't NvimTree.
--- Get all windows in the current tabpage that aren't NvimTree.
---@return table with valid win_ids
local function usable_win_ids()
local tabpage = vim.api.nvim_get_current_tabpage()
@@ -302,6 +302,8 @@ local function edit_in_current_buf(filename)
vim.cmd("keepalt keepjumps edit " .. vim.fn.fnameescape(filename))
end
---@param mode string
---@param filename string
function M.fn(mode, filename)
if type(mode) ~= "string" then
mode = ""

View File

@@ -6,6 +6,8 @@ local M = {}
---Retrieves the absolute path to the node.
---Safely handles the node representing the current directory
---(the topmost node in the nvim-tree window)
---@param node Node
---@return string
local function get_node_path(node)
if node.name == ".." then
return utils.path_remove_trailing(core.get_cwd())
@@ -14,6 +16,7 @@ local function get_node_path(node)
end
end
---@param node Node
function M.run_file_command(node)
local node_path = get_node_path(node)
vim.api.nvim_input(": " .. node_path .. "<Home>")

View File

@@ -3,6 +3,7 @@ local utils = require "nvim-tree.utils"
local M = {}
---@param node Node
function M.fn(node)
if #M.config.system_open.cmd == 0 then
require("nvim-tree.utils").notify.warn "Cannot open file with system application. Unrecognized platform."

View File

@@ -8,6 +8,9 @@ local Iterator = require "nvim-tree.iterators.node-iterator"
local M = {}
---@param node Node
---@param projects table
---@param unloaded_bufnr number|nil
local function refresh_nodes(node, projects, unloaded_bufnr)
Iterator.builder({ node })
:applier(function(n)
@@ -22,6 +25,8 @@ local function refresh_nodes(node, projects, unloaded_bufnr)
:iterate()
end
---@param parent_node table
---@param projects table
function M.reload_node_status(parent_node, projects)
local toplevel = git.get_toplevel(parent_node.absolute_path)
local status = projects[toplevel] or {}

View File

@@ -6,6 +6,8 @@ local M = {
current_tab = vim.api.nvim_get_current_tabpage(),
}
---@param name string
---@return string
local function clean_input_cwd(name)
name = vim.fn.fnameescape(name)
local root_parent_cwd = vim.fn.fnamemodify(utils.path_remove_trailing(core.get_cwd()), ":h")
@@ -16,17 +18,23 @@ local function clean_input_cwd(name)
end
end
---@param new_tabpage integer
---@return boolean
local function is_window_event(new_tabpage)
local is_event_scope_window = vim.v.event.scope == "window" or vim.v.event.changed_window
return is_event_scope_window and new_tabpage == M.current_tab
end
---@param foldername string
---@return boolean
local function prevent_cwd_change(foldername)
local is_same_cwd = foldername == core.get_cwd()
local is_restricted_above = M.options.restrict_above_cwd and foldername < vim.fn.getcwd(-1, -1)
return is_same_cwd or is_restricted_above
end
---@param input_cwd string
---@param with_open boolean|nil
function M.fn(input_cwd, with_open)
if not core.get_explorer() then
return
@@ -46,6 +54,8 @@ function M.fn(input_cwd, with_open)
M.force_dirchange(foldername, with_open)
end
---@param global boolean
---@param path string
local function cd(global, path)
vim.cmd((global and "cd " or "lcd ") .. vim.fn.fnameescape(path))
end
@@ -54,6 +64,8 @@ local function should_change_dir()
return M.options.enable and vim.tbl_isempty(vim.v.event)
end
---@param f function
---@return fun(foldername: string, should_open_view: boolean|nil)
local function add_profiling_to(f)
return function(foldername, should_open_view)
local profile = log.profile_start("change dir %s", foldername)

View File

@@ -3,13 +3,14 @@ local core = require "nvim-tree.core"
local M = {}
---@param node Node
function M.fn(node)
if not node or node.name == ".." then
return require("nvim-tree.actions.root.change-dir").fn ".."
require("nvim-tree.actions.root.change-dir").fn ".."
else
local newdir = vim.fn.fnamemodify(utils.path_remove_trailing(core.get_cwd()), ":h")
require("nvim-tree.actions.root.change-dir").fn(newdir)
return require("nvim-tree.actions.finders.find-file").fn(node.absolute_path)
require("nvim-tree.actions.finders.find-file").fn(node.absolute_path)
end
end

View File

@@ -6,6 +6,7 @@ local Iterator = require "nvim-tree.iterators.node-iterator"
local M = {}
---@return fun(path: string): boolean
local function buf_match()
local buffer_paths = vim.tbl_map(function(buffer)
return vim.api.nvim_buf_get_name(buffer)
@@ -22,6 +23,7 @@ local function buf_match()
end
end
---@param keep_buffers boolean
function M.fn(keep_buffers)
local node = lib.get_node_at_cursor()
local explorer = core.get_explorer()

View File

@@ -57,6 +57,7 @@ local function gen_iterator()
end
end
---@param base_node table
function M.fn(base_node)
local node = base_node.nodes and base_node or core.get_explorer()
if gen_iterator()(node) then