From 10db6943cb40625941a35235eeb385ffdfbf827a Mon Sep 17 00:00:00 2001 From: alexfinger21 <61606770+alexfinger21@users.noreply.github.com> Date: Sun, 27 Jul 2025 19:42:38 -0400 Subject: [PATCH] fix(#3077): deleting a directory containing symlinked directory will delete the contents of the linked directory (#3168) * fix(#3077) deleting a directory containing symlink file will delete all content inside the symlink * fix(#3077): add diagnostic override TODO --------- Co-authored-by: Alexander Courtis --- lua/nvim-tree/actions/fs/remove-file.lua | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/lua/nvim-tree/actions/fs/remove-file.lua b/lua/nvim-tree/actions/fs/remove-file.lua index fd71ae6a..b4755063 100644 --- a/lua/nvim-tree/actions/fs/remove-file.lua +++ b/lua/nvim-tree/actions/fs/remove-file.lua @@ -71,9 +71,16 @@ local function remove_dir(cwd) -- Type must come from fs_stat and not fs_scandir_next to maintain sshfs compatibility local stat = vim.loop.fs_stat(new_cwd) - local type = stat and stat.type or nil + -- TODO remove once 0.12 is the minimum neovim version + -- path incorrectly specified as an integer, fixed upstream for neovim 0.12 https://github.com/neovim/neovim/pull/33872 + ---@diagnostic disable-next-line: param-type-mismatch + local lstat = vim.loop.fs_lstat(new_cwd) - if type == "directory" then + local type = stat and stat.type or nil + -- Checks if file is a link file to ensure deletion of the symlink instead of the file it points to + local ltype = lstat and lstat.type or nil + + if type == "directory" and ltype ~= "link" then local success = remove_dir(new_cwd) if not success then return false