fix(file_selector): avoid converting to relative path twice
get_project_filepath() converts candidate file paths to relative form twice, once in the first iterator, and then in vim.tbl_map() call while. It also iterates the same list twice for no apparent reason. Combine both scans into one and use dedicated vim.fn.isdirectory().
This commit is contained in:
@@ -52,17 +52,19 @@ function FileSelector:handle_path_selection(selected_paths)
|
|||||||
self:emit("update")
|
self:emit("update")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---Scans a given directory and produces a list of files/directories with paths relative to the project root
|
||||||
|
---@return string[]
|
||||||
local function get_project_filepaths()
|
local function get_project_filepaths()
|
||||||
local project_root = Utils.get_project_root()
|
local project_root = Utils.get_project_root()
|
||||||
local files = Utils.scan_directory({ directory = project_root, add_dirs = true })
|
local files = Utils.scan_directory({ directory = project_root, add_dirs = true })
|
||||||
files = vim.iter(files):map(function(filepath) return Utils.make_relative_path(filepath, project_root) end):totable()
|
return vim
|
||||||
|
.iter(files)
|
||||||
return vim.tbl_map(function(path)
|
:map(function(path)
|
||||||
local rel_path = Utils.make_relative_path(path, project_root)
|
local rel_path = Utils.make_relative_path(path, project_root)
|
||||||
local stat = vim.loop.fs_stat(path)
|
if vim.fn.isdirectory(rel_path) == 1 then rel_path = rel_path .. "/" end
|
||||||
if stat and stat.type == "directory" then rel_path = rel_path .. "/" end
|
|
||||||
return rel_path
|
return rel_path
|
||||||
end, files)
|
end)
|
||||||
|
:totable()
|
||||||
end
|
end
|
||||||
|
|
||||||
---@param id integer
|
---@param id integer
|
||||||
|
|||||||
Reference in New Issue
Block a user