diff options
author | Mike <4576770+mike325@users.noreply.github.com> | 2023-07-18 08:36:04 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-07-18 14:36:04 +0800 |
commit | e4da418ba8388e94bb186e3f9a2004ee1e96f1e5 (patch) | |
tree | 703fdc9f0f0d77beeaa64366076c992ae0071382 | |
parent | 80cf0f3d29fa337d43ec417759cb061bd2798ea8 (diff) | |
download | rneovim-e4da418ba8388e94bb186e3f9a2004ee1e96f1e5.tar.gz rneovim-e4da418ba8388e94bb186e3f9a2004ee1e96f1e5.tar.bz2 rneovim-e4da418ba8388e94bb186e3f9a2004ee1e96f1e5.zip |
fix(fs.lua): normalize slash truncation (#23753)
Preserve last slash in windows' root drive directories
-rw-r--r-- | runtime/lua/vim/fs.lua | 6 | ||||
-rw-r--r-- | test/functional/lua/fs_spec.lua | 5 |
2 files changed, 10 insertions, 1 deletions
diff --git a/runtime/lua/vim/fs.lua b/runtime/lua/vim/fs.lua index 48d76e5d7e..d06dcb87cf 100644 --- a/runtime/lua/vim/fs.lua +++ b/runtime/lua/vim/fs.lua @@ -348,7 +348,11 @@ function M.normalize(path, opts) path = path:gsub('%$([%w_]+)', vim.uv.os_getenv) end - return (path:gsub('\\', '/'):gsub('/+', '/'):gsub('(.)/$', '%1')) + path = path:gsub('\\', '/'):gsub('/+', '/') + if iswin and path:match('^%w:/$') then + return path + end + return (path:gsub('(.)/$', '%1')) end return M diff --git a/test/functional/lua/fs_spec.lua b/test/functional/lua/fs_spec.lua index c1091cff60..2c7b3ff324 100644 --- a/test/functional/lua/fs_spec.lua +++ b/test/functional/lua/fs_spec.lua @@ -301,5 +301,10 @@ describe('vim.fs', function() return vim.fs.normalize('$XDG_CONFIG_HOME/nvim') ]], xdg_config_home)) end) + if is_os('win') then + it('Last slash is not truncated from root drive', function() + eq('C:/', exec_lua [[ return vim.fs.normalize('C:/') ]]) + end) + end end) end) |