diff options
author | Jon Huhn <nojnhuh@users.noreply.github.com> | 2023-05-09 11:12:54 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-09 18:12:54 +0200 |
commit | 075a72d5ff9d49b1e93c0253b54931ecdcf673f3 (patch) | |
tree | 9fba59ed88a81d2bbecd11a04fb214409ac47bc0 | |
parent | 82bb7bbc481603d709df2b6d03918d15b81dac96 (diff) | |
download | rneovim-075a72d5ff9d49b1e93c0253b54931ecdcf673f3.tar.gz rneovim-075a72d5ff9d49b1e93c0253b54931ecdcf673f3.tar.bz2 rneovim-075a72d5ff9d49b1e93c0253b54931ecdcf673f3.zip |
fix(lsp): fix relative patterns for `workspace/didChangeWatchedFiles` (#23548)
-rw-r--r-- | runtime/lua/vim/lsp/_watchfiles.lua | 10 | ||||
-rw-r--r-- | test/functional/plugin/lsp_spec.lua | 10 |
2 files changed, 14 insertions, 6 deletions
diff --git a/runtime/lua/vim/lsp/_watchfiles.lua b/runtime/lua/vim/lsp/_watchfiles.lua index 533a955925..3a78724d79 100644 --- a/runtime/lua/vim/lsp/_watchfiles.lua +++ b/runtime/lua/vim/lsp/_watchfiles.lua @@ -198,16 +198,17 @@ function M.register(reg, ctx) end local watch_regs = {} for _, w in ipairs(reg.registerOptions.watchers) do + local relative_pattern = false local glob_patterns = {} if type(w.globPattern) == 'string' then for _, folder in ipairs(client.workspace_folders) do table.insert(glob_patterns, { baseUri = folder.uri, pattern = w.globPattern }) end else + relative_pattern = true table.insert(glob_patterns, w.globPattern) end for _, glob_pattern in ipairs(glob_patterns) do - local pattern = parse(glob_pattern.pattern) local base_dir = nil if type(glob_pattern.baseUri) == 'string' then base_dir = glob_pattern.baseUri @@ -216,9 +217,16 @@ function M.register(reg, ctx) end assert(base_dir, "couldn't identify root of watch") base_dir = vim.uri_to_fname(base_dir) + local kind = w.kind or protocol.WatchKind.Create + protocol.WatchKind.Change + protocol.WatchKind.Delete + local pattern = glob_pattern.pattern + if relative_pattern then + pattern = base_dir .. '/' .. pattern + end + pattern = parse(pattern) + table.insert(watch_regs, { base_dir = base_dir, pattern = pattern, diff --git a/test/functional/plugin/lsp_spec.lua b/test/functional/plugin/lsp_spec.lua index 5ba0706208..fc7b2dafb8 100644 --- a/test/functional/plugin/lsp_spec.lua +++ b/test/functional/plugin/lsp_spec.lua @@ -3855,7 +3855,7 @@ describe('LSP', function() end) it('correctly registers and unregisters', function() - local root_dir = 'some_dir' + local root_dir = '/some_dir' exec_lua(create_server_definition) local result = exec_lua([[ local root_dir = ... @@ -4009,10 +4009,9 @@ describe('LSP', function() local watchers = {} local max_kind = protocol.WatchKind.Create + protocol.WatchKind.Change + protocol.WatchKind.Delete for i = 0, max_kind do - local j = i table.insert(watchers, { globPattern = { - baseUri = vim.uri_from_fname('/dir'..tostring(i)), + baseUri = vim.uri_from_fname('/dir'), pattern = 'watch'..tostring(i), }, kind = i, @@ -4031,7 +4030,7 @@ describe('LSP', function() }, { client_id = client_id }) for i = 0, max_kind do - local filename = 'watch'..tostring(i) + local filename = '/dir/watch' .. tostring(i) send_event(filename, vim._watch.FileChangeType.Created) send_event(filename, vim._watch.FileChangeType.Changed) send_event(filename, vim._watch.FileChangeType.Deleted) @@ -4045,7 +4044,8 @@ describe('LSP', function() local function watched_uri(fname) return exec_lua([[ - return vim.uri_from_fname(...) + local fname = ... + return vim.uri_from_fname('/dir/' .. fname) ]], fname) end |