From 418878b3d253618a284afc2d77e41bbd5bb67c31 Mon Sep 17 00:00:00 2001 From: Kai Ting Date: Thu, 16 Feb 2023 21:09:10 -0800 Subject: [PATCH 1/2] fix(#2004): Change path_relative to use string find and substring to avoid using regex. - This removed the original gsub with unintentional captures in path_to_matching_str - The original regex based code captures create a limit where input path cannot have more than 32 special charactors ( `.` , `_` or `-`) --- lua/nvim-tree/utils.lua | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/lua/nvim-tree/utils.lua b/lua/nvim-tree/utils.lua index 2604add9324..b5e8085f25f 100644 --- a/lua/nvim-tree/utils.lua +++ b/lua/nvim-tree/utils.lua @@ -11,10 +11,6 @@ M.is_wsl = vim.fn.has "wsl" == 1 -- false for WSL M.is_windows = vim.fn.has "win32" == 1 or vim.fn.has "win32unix" == 1 -function M.path_to_matching_str(path) - return path:gsub("(%-)", "(%%-)"):gsub("(%.)", "(%%.)"):gsub("(%_)", "(%%_)") -end - function M.str_find(haystack, needle) return vim.fn.stridx(haystack, needle) ~= -1 end @@ -59,7 +55,14 @@ end ---@param relative_to string ---@return string function M.path_relative(path, relative_to) - local p, _ = path:gsub("^" .. M.path_to_matching_str(M.path_add_trailing(relative_to)), "") + local _, r = path:find(M.path_add_trailing(relative_to), 1, true) + local p = path + if r then + -- take the relative path starting after '/' + -- if somehow given a completely matching path, + -- returns "" + p = path:sub(r+1) + end return p end From 7a05754e682e33c285dba183191f880717b49e1f Mon Sep 17 00:00:00 2001 From: Alexander Courtis Date: Mon, 20 Feb 2023 10:13:38 +1100 Subject: [PATCH 2/2] style nit --- lua/nvim-tree/utils.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lua/nvim-tree/utils.lua b/lua/nvim-tree/utils.lua index b5e8085f25f..6f9b7db2aca 100644 --- a/lua/nvim-tree/utils.lua +++ b/lua/nvim-tree/utils.lua @@ -59,9 +59,9 @@ function M.path_relative(path, relative_to) local p = path if r then -- take the relative path starting after '/' - -- if somehow given a completely matching path, + -- if somehow given a completely matching path, -- returns "" - p = path:sub(r+1) + p = path:sub(r + 1) end return p end