From 433e6d6808851e20e7f012d4e27f3d089995eabb Mon Sep 17 00:00:00 2001 From: Demaro Stanberry Date: Tue, 28 Feb 2023 14:55:55 -0600 Subject: [PATCH] fix: improve displayed session names * fix: sanitize string before passing to `string.gsub(...)` fix: improve displayed paths on windows os * chore: improve scripting for review --- lua/persisted/init.lua | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/lua/persisted/init.lua b/lua/persisted/init.lua index 5f3e643..0015ff1 100644 --- a/lua/persisted/init.lua +++ b/lua/persisted/init.lua @@ -193,22 +193,42 @@ function M.toggle() return M.start() end +---Escapes special characters before performing string substitution +---@param str string +---@param pattern string +---@param repl string|number|table|function +---@param n? integer +---@return string +---@return integer count +local function replace(str, pattern, repl, n) + pattern = string.gsub(pattern, "[%(%)%.%+%-%*%?%[%]%^%$%%]", "%%%1") -- escape pattern + repl = string.gsub(repl, "[%%]", "%%%%") -- escape replacement + return string.gsub(str, pattern, repl, n) +end + ---List all of the sessions ---@return table function M.list() local save_dir = config.options.save_dir local session_files = vim.fn.glob(save_dir .. "*.vim", true, true) local branch_separator = config.options.branch_separator + local dir_separator = utils.get_dir_pattern() local sessions = {} for _, session in pairs(session_files) do - local session_name = session - :gsub(save_dir, "") - :gsub("%%", utils.get_dir_pattern()) - :gsub(vim.fn.expand("~"), utils.get_dir_pattern()) + local session_name = replace(session, save_dir, "") + :gsub("%%", dir_separator) + :gsub(vim.fn.expand("~"), dir_separator) :gsub("//", "") :sub(1, -5) + if vim.fn.has("win32") == 1 then + -- format drive letter (no trailing separator) + session_name = replace(session_name, dir_separator, ":", 1) + -- format remaining filepath separator(s) + session_name = replace(session_name, dir_separator, "\\") + end + local branch, dir_path if string.find(session_name, branch_separator, 1, true) then @@ -226,7 +246,6 @@ function M.list() ["dir_path"] = dir_path, }) end - return sessions end