fix(vim.fs): default to follow=false #32859

Problem:
Following symlinks can have surprising behavior and slow performance.

Solution:
Do not set it by default.
This commit is contained in:
Mike
2025-03-14 09:36:39 +01:00
committed by GitHub
parent 2db1ae37f1
commit 6401b433f7
3 changed files with 8 additions and 12 deletions

View File

@@ -136,7 +136,7 @@ end
--- - skip: (fun(dir_name: string): boolean)|nil Predicate
--- to control traversal. Return false to stop searching the current directory.
--- Only useful when depth > 1
--- - follow: boolean|nil Follow symbolic links. (default: true)
--- - follow: boolean|nil Follow symbolic links. (default: false)
---
---@return Iterator over items in {path}. Each iteration yields two values: "name" and "type".
--- "name" is the basename of the item relative to {path}.
@@ -179,7 +179,7 @@ function M.dir(path, opts)
if
opts.depth
and level < opts.depth
and (t == 'directory' or (t == 'link' and opts.follow ~= false and (vim.uv.fs_stat(
and (t == 'directory' or (t == 'link' and opts.follow and (vim.uv.fs_stat(
M.joinpath(path, f)
) or {}).type == 'directory'))
and (not opts.skip or opts.skip(f) ~= false)
@@ -217,7 +217,7 @@ end
--- @field limit? number
---
--- Follow symbolic links.
--- (default: `true`)
--- (default: `false`)
--- @field follow? boolean
--- Find files or directories (or other items as specified by `opts.type`) in the given path.
@@ -357,11 +357,7 @@ function M.find(names, opts)
if
type_ == 'directory'
or (
type_ == 'link'
and opts.follow ~= false
and (vim.uv.fs_stat(f) or {}).type == 'directory'
)
or (type_ == 'link' and opts.follow and (vim.uv.fs_stat(f) or {}).type == 'directory')
then
dirs[#dirs + 1] = f
end