diff --git a/runtime/lua/vim/ui.lua b/runtime/lua/vim/ui.lua index 5ebff4beb0..8b6aad226d 100644 --- a/runtime/lua/vim/ui.lua +++ b/runtime/lua/vim/ui.lua @@ -204,20 +204,19 @@ function M._get_open_cmd() end end ---- Returns all URLs at cursor, if any. ---- @return string[] -function M._get_urls() - local urls = {} ---@type string[] - - local bufnr = vim.api.nvim_get_current_buf() - local cursor = vim.api.nvim_win_get_cursor(0) - local row = cursor[1] - 1 - local col = cursor[2] - - -- Find LSP document links under the cursor. +--- @param bufnr integer +local get_lsp_urls = function(bufnr) + local has_lsp_support = false + for _, client in pairs(vim.lsp.get_clients({ bufnr = bufnr })) do + has_lsp_support = has_lsp_support or client:supports_method('textDocument/documentLink', bufnr) + end + if not has_lsp_support then + return {} + end local params = { textDocument = vim.lsp.util.make_text_document_params(bufnr) } local results = vim.lsp.buf_request_sync(bufnr, 'textDocument/documentLink', params) + local urls = {} for client_id, result in pairs(results or {}) do if result.error then vim.lsp.log.error(result.error) @@ -239,6 +238,20 @@ function M._get_urls() end end end + return urls +end + +--- Returns all URLs at cursor, if any. +--- @return string[] +function M._get_urls() + local urls = {} ---@type string[] + + local bufnr = vim.api.nvim_get_current_buf() + local cursor = vim.api.nvim_win_get_cursor(0) + local row = cursor[1] - 1 + local col = cursor[2] + + urls = vim.list_extend(urls, get_lsp_urls(bufnr)) local extmarks = vim.api.nvim_buf_get_extmarks(bufnr, -1, { row, col }, { row, col }, { details = true,