aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike <4576770+mike325@users.noreply.github.com>2025-03-14 09:36:39 +0100
committerGitHub <noreply@github.com>2025-03-14 01:36:39 -0700
commit6401b433f7c040663b1ae01204e1b07b567d6a1b (patch)
tree40200171414f965555082bbdb63f00e393f87b26
parent2db1ae37f14d71d1391110fe18709329263c77c9 (diff)
downloadrneovim-6401b433f7c040663b1ae01204e1b07b567d6a1b.tar.gz
rneovim-6401b433f7c040663b1ae01204e1b07b567d6a1b.tar.bz2
rneovim-6401b433f7c040663b1ae01204e1b07b567d6a1b.zip
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.
-rw-r--r--runtime/doc/lua.txt4
-rw-r--r--runtime/doc/news.txt4
-rw-r--r--runtime/lua/vim/fs.lua12
3 files changed, 8 insertions, 12 deletions
diff --git a/runtime/doc/lua.txt b/runtime/doc/lua.txt
index fa3367602d..6705768aeb 100644
--- a/runtime/doc/lua.txt
+++ b/runtime/doc/lua.txt
@@ -2985,7 +2985,7 @@ vim.fs.dir({path}, {opts}) *vim.fs.dir()*
• 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:
@@ -3058,7 +3058,7 @@ vim.fs.find({names}, {opts}) *vim.fs.find()*
• {limit}? (`number`, default: `1`) Stop the search after
finding this many matches. Use `math.huge` to place no
limit on the number of matches.
- • {follow}? (`boolean`, default: `true`) Follow symbolic
+ • {follow}? (`boolean`, default: `false`) Follow symbolic
links.
Return: ~
diff --git a/runtime/doc/news.txt b/runtime/doc/news.txt
index cfb40f1ca6..54a67ebb59 100644
--- a/runtime/doc/news.txt
+++ b/runtime/doc/news.txt
@@ -330,8 +330,8 @@ LUA
• |vim.json.encode()| has an option to enable forward slash escaping
• |vim.fs.abspath()| converts paths to absolute paths.
• |vim.fs.relpath()| gets relative path compared to base path.
-• |vim.fs.dir()| and |vim.fs.find()| now follow symbolic links by default,
- the behavior can be turn off using the new `follow` option.
+• |vim.fs.dir()| and |vim.fs.find()| can now follow symbolic links,
+ the behavior can be turn on using the new `follow` option.
• |vim.text.indent()| indents/dedents text.
OPTIONS
diff --git a/runtime/lua/vim/fs.lua b/runtime/lua/vim/fs.lua
index 8b4242223a..8862afc760 100644
--- a/runtime/lua/vim/fs.lua
+++ b/runtime/lua/vim/fs.lua
@@ -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