aboutsummaryrefslogtreecommitdiffstats
path: root/lua/mason-core/fs.lua
diff options
context:
space:
mode:
authorWilliam Boman <william@redwill.se>2026-05-30 15:57:13 +0200
committerGitHub <noreply@github.com>2026-05-30 15:57:13 +0200
commit93e99ea2da7b8a10ecc6dc189b0ca3dd71e81e1c (patch)
treea397cfc1b387aee108951c4fb3c5e305ab59bc94 /lua/mason-core/fs.lua
parentrefactor(fs): implement mkdirp natively via libuv (#2100) (diff)
downloadmason-93e99ea2da7b8a10ecc6dc189b0ca3dd71e81e1c.tar
mason-93e99ea2da7b8a10ecc6dc189b0ca3dd71e81e1c.tar.gz
mason-93e99ea2da7b8a10ecc6dc189b0ca3dd71e81e1c.tar.bz2
mason-93e99ea2da7b8a10ecc6dc189b0ca3dd71e81e1c.tar.lz
mason-93e99ea2da7b8a10ecc6dc189b0ca3dd71e81e1c.tar.xz
mason-93e99ea2da7b8a10ecc6dc189b0ca3dd71e81e1c.tar.zst
mason-93e99ea2da7b8a10ecc6dc189b0ca3dd71e81e1c.zip
refactor(fs): use fs.ls in readdir implementation, prefer fs_stat over fs_fstat (#2101)
Diffstat (limited to 'lua/mason-core/fs.lua')
-rw-r--r--lua/mason-core/fs.lua49
1 files changed, 13 insertions, 36 deletions
diff --git a/lua/mason-core/fs.lua b/lua/mason-core/fs.lua
index 597ba3fa..2f620a49 100644
--- a/lua/mason-core/fs.lua
+++ b/lua/mason-core/fs.lua
@@ -7,32 +7,29 @@ local function make_module(uv)
local M = {}
---@param path string
- function M.fstat(path)
- log.trace("fs: fstat", path)
- local fd = uv.fs_open(path, "r", 438)
- local fstat = uv.fs_fstat(fd)
- uv.fs_close(fd)
- return fstat
+ function M.stat(path)
+ log.trace("fs: stat", path)
+ return assert(uv.fs_stat(path))
end
---@param path string
function M.file_exists(path)
log.trace("fs: file_exists", path)
- local ok, fstat = pcall(M.fstat, path)
+ local ok, stat = pcall(M.stat, path)
if not ok then
return false
end
- return fstat.type == "file"
+ return stat.type == "file"
end
---@param path string
function M.dir_exists(path)
log.trace("fs: dir_exists", path)
- local ok, fstat = pcall(M.fstat, path)
+ local ok, stat = pcall(M.stat, path)
if not ok then
return false
end
- return fstat.type == "directory"
+ return stat.type == "directory"
end
---@param path string
@@ -188,33 +185,13 @@ local function make_module(uv)
---@param path string: The full path to the directory to read.
---@return ReaddirEntry[]
function M.readdir(path)
- log.trace("fs: fs_opendir", path)
- local dir = assert(vim.loop.fs_opendir(path, nil, 25))
local all_entries = {}
- local exhausted = false
-
- repeat
- local entries = uv.fs_readdir(dir)
- log.trace("fs: fs_readdir", path, entries)
- if entries and #entries > 0 then
- for i = 1, #entries do
- if entries[i].name and not entries[i].type then
- -- See https://github.com/luvit/luv/issues/660
- local full_path = Path.concat { path, entries[i].name }
- log.trace("fs: fs_readdir falling back to fs_stat to find type", full_path)
- local stat = uv.fs_stat(full_path)
- entries[i].type = stat.type
- end
- all_entries[#all_entries + 1] = entries[i]
- end
- else
- log.trace("fs: fs_readdir exhausted scan", path)
- exhausted = true
- end
- until exhausted
-
- uv.fs_closedir(dir)
-
+ M.ls(path, function(_, entry, type)
+ all_entries[#all_entries + 1] = {
+ name = entry,
+ type = type,
+ }
+ end)
return all_entries
end