neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

commit 0190771713241b10872b9e2118e16ea4e4b2d1a0
parent cb146cc4aad746053535533cbea8834414ea82a2
Author: Ilia Choly <ilia.choly@gmail.com>
Date:   Wed, 28 Feb 2024 04:50:53 -0500

fix(lua): remove uri fragment from file paths (#27647)

Problem: Some LSP servers return `textDocument/documentLink` responses
         containing file URIs with line/column numbers in the fragment.
         `vim.uri_to_fname` returns invalid file names for these URIs.

Solution: Remove the URI fragment from file URIs.
Diffstat:
Mruntime/lua/vim/uri.lua | 4++++
Mtest/functional/lua/uri_spec.lua | 15+++++++++++++++
2 files changed, 19 insertions(+), 0 deletions(-)

diff --git a/runtime/lua/vim/uri.lua b/runtime/lua/vim/uri.lua @@ -104,6 +104,10 @@ function M.uri_to_fname(uri) if scheme ~= 'file' then return uri end + local fragment_index = uri:find('#') + if fragment_index ~= nil then + uri = uri:sub(1, fragment_index - 1) + end uri = M.uri_decode(uri) --TODO improve this. if is_windows_file_uri(uri) then diff --git a/test/functional/lua/uri_spec.lua b/test/functional/lua/uri_spec.lua @@ -88,6 +88,12 @@ describe('URI methods', function() eq('/xy/åäö/ɧ/汉语/↥/🤦/🦄/å/بِيَّ.txt', exec_lua(test_case)) end) + + it('file path with uri fragment', function() + exec_lua("uri = 'file:///Foo/Bar/Baz.txt#fragment'") + + eq('/Foo/Bar/Baz.txt', exec_lua('return vim.uri_to_fname(uri)')) + end) end) describe('decode Windows filepath', function() @@ -184,6 +190,15 @@ describe('URI methods', function() ]] ) end) + + it('uri_to_fname returns non-file schema URI with fragment unchanged', function() + eq( + 'scheme://path#fragment', + exec_lua [[ + return vim.uri_to_fname('scheme://path#fragment') + ]] + ) + end) end) end)