mirror of
https://github.com/neovim/neovim.git
synced 2025-10-26 12:27:24 +00:00
feat(lua): add vim.fs.abspath
Problem: There is currently no way to check if a given path is absolute or convert a relative path to an absolute path through the Lua stdlib. `vim.fs.joinpath` does not work when the path is absolute. There is also currently no way to resolve `C:foo\bar` style paths in Windows. Solution: Add `vim.fs.abspath`, which allows converting any path to an absolute path. This also allows checking if current path is absolute by doing `vim.fs.abspath(path) == path`. It also has support for `C:foo\bar` style paths in Windows.
This commit is contained in:
@@ -454,4 +454,38 @@ describe('vim.fs', function()
|
||||
end)
|
||||
end)
|
||||
end)
|
||||
|
||||
describe('abspath', function()
|
||||
local cwd = is_os('win') and vim.uv.cwd():gsub('\\', '/') or vim.uv.cwd()
|
||||
local home = is_os('win') and vim.uv.os_homedir():gsub('\\', '/') or vim.uv.os_homedir()
|
||||
|
||||
it('works', function()
|
||||
eq(cwd .. '/foo', vim.fs.abspath('foo'))
|
||||
eq(cwd .. '/././foo', vim.fs.abspath('././foo'))
|
||||
eq(cwd .. '/.././../foo', vim.fs.abspath('.././../foo'))
|
||||
end)
|
||||
|
||||
it('works with absolute paths', function()
|
||||
if is_os('win') then
|
||||
eq([[C:/foo]], vim.fs.abspath([[C:\foo]]))
|
||||
eq([[C:/foo/../.]], vim.fs.abspath([[C:\foo\..\.]]))
|
||||
else
|
||||
eq('/foo/../.', vim.fs.abspath('/foo/../.'))
|
||||
eq('/foo/bar', vim.fs.abspath('/foo/bar'))
|
||||
end
|
||||
end)
|
||||
|
||||
it('expands ~', function()
|
||||
eq(home .. '/foo', vim.fs.abspath('~/foo'))
|
||||
eq(home .. '/./.././foo', vim.fs.abspath('~/./.././foo'))
|
||||
end)
|
||||
|
||||
if is_os('win') then
|
||||
it('works with drive-specific cwd on Windows', function()
|
||||
local cwd_drive = cwd:match('^%w:')
|
||||
|
||||
eq(cwd .. '/foo', vim.fs.abspath(cwd_drive .. 'foo'))
|
||||
end)
|
||||
end
|
||||
end)
|
||||
end)
|
||||
|
||||
Reference in New Issue
Block a user