From 43c47ebc49ba601c7f0d06d65ce61d6aa8e670ab Mon Sep 17 00:00:00 2001 From: James Trew <66286082+jamestrew@users.noreply.github.com> Date: Tue, 13 Aug 2024 01:33:53 +0000 Subject: [PATCH] fix(lsp): support multiple servers for dynamic symbols (#3248) --- lua/telescope/builtin/__lsp.lua | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/lua/telescope/builtin/__lsp.lua b/lua/telescope/builtin/__lsp.lua index e63a5a7..27e65f9 100644 --- a/lua/telescope/builtin/__lsp.lua +++ b/lua/telescope/builtin/__lsp.lua @@ -421,13 +421,19 @@ local function get_workspace_symbols_requester(bufnr, opts) return function(prompt) local tx, rx = channel.oneshot() cancel() - _, cancel = vim.lsp.buf_request(bufnr, "workspace/symbol", { query = prompt }, tx) + cancel = vim.lsp.buf_request_all(bufnr, "workspace/symbol", { query = prompt }, tx) - -- Handle 0.5 / 0.5.1 handler situation - local err, res = rx() - assert(not err, err) + local results = rx() ---@type table + local locations = {} ---@type vim.lsp.util.locations_to_items.ret[] + + for _, client_res in pairs(results) do + if client_res.error then + vim.api.nvim_err_writeln("Error when executing workspace/symbol : " .. client_res.error.message) + elseif client_res.result ~= nil then + vim.list_extend(locations, vim.lsp.util.symbols_to_items(client_res.result, bufnr)) + end + end - local locations = vim.lsp.util.symbols_to_items(res or {}, bufnr) or {} if not vim.tbl_isempty(locations) then locations = utils.filter_symbols(locations, opts, symbols_sorter) or {} end