aboutsummaryrefslogtreecommitdiff
path: root/runtime/lua/vim/fs.lua
diff options
context:
space:
mode:
authorLewis Russell <lewis6991@gmail.com>2023-03-26 13:01:48 +0100
committerLewis Russell <lewis6991@gmail.com>2023-03-26 13:30:11 +0100
commit25fa051fa157ca4bce712e61602447a4222581ca (patch)
tree49b2694b0dc3f9a8bd78d0464c5554a1f47c9291 /runtime/lua/vim/fs.lua
parentffd8cd1a96a96b09351a5ffde1068c3595443128 (diff)
downloadrneovim-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.lua34
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