diff options
author | Lewis Russell <lewis6991@gmail.com> | 2023-03-26 13:01:48 +0100 |
---|---|---|
committer | Lewis Russell <lewis6991@gmail.com> | 2023-03-26 13:30:11 +0100 |
commit | 25fa051fa157ca4bce712e61602447a4222581ca (patch) | |
tree | 49b2694b0dc3f9a8bd78d0464c5554a1f47c9291 /runtime/lua/vim/fs.lua | |
parent | ffd8cd1a96a96b09351a5ffde1068c3595443128 (diff) | |
download | rneovim-25fa051fa157ca4bce712e61602447a4222581ca.tar.gz rneovim-25fa051fa157ca4bce712e61602447a4222581ca.tar.bz2 rneovim-25fa051fa157ca4bce712e61602447a4222581ca.zip |
feat(vim.fs): improve normalize
- Add options argument with an option to expand env vars
- Resolve '//' -> '/'
- Use in vim.loader
Diffstat (limited to 'runtime/lua/vim/fs.lua')
-rw-r--r-- | runtime/lua/vim/fs.lua | 34 |
1 files changed, 25 insertions, 9 deletions
diff --git a/runtime/lua/vim/fs.lua b/runtime/lua/vim/fs.lua index c6371e9163..407b334f20 100644 --- a/runtime/lua/vim/fs.lua +++ b/runtime/lua/vim/fs.lua @@ -321,16 +321,32 @@ end --- </pre> --- ---@param path (string) Path to normalize +---@param opts table|nil Options: +--- - expand_env: boolean Expand environment variables (default: true) ---@return (string) Normalized path -function M.normalize(path) - vim.validate({ path = { path, 's' } }) - return ( - path - :gsub('^~$', vim.loop.os_homedir()) - :gsub('^~/', vim.loop.os_homedir() .. '/') - :gsub('%$([%w_]+)', vim.loop.os_getenv) - :gsub('\\', '/') - ) +function M.normalize(path, opts) + opts = opts or {} + + vim.validate({ + path = { path, { 'string' } }, + expand_env = { opts.expand_env, { 'boolean' }, true }, + }) + + if path:sub(1, 1) == '~' then + local home = vim.loop.os_homedir() or '~' + if home:sub(-1) == '\\' or home:sub(-1) == '/' then + home = home:sub(1, -2) + end + path = home .. path:sub(2) + end + + if opts.expand_env == nil or opts.expand_env then + path = path:gsub('%$([%w_]+)', vim.loop.os_getenv) + end + + path = path:gsub('\\', '/'):gsub('/+', '/') + + return path:sub(-1) == '/' and path:sub(1, -2) or path end return M |