mirror of
https://github.com/neovim/neovim
synced 2025-07-21 22:02:16 +00:00
feat(lsp)!: symbol_to_item
requires offset_encoding
This commit is contained in:
@ -2376,14 +2376,17 @@ stylize_markdown({bufnr}, {contents}, {opts})
|
|||||||
Return: ~
|
Return: ~
|
||||||
(`table`) stripped content
|
(`table`) stripped content
|
||||||
|
|
||||||
symbols_to_items({symbols}, {bufnr}) *vim.lsp.util.symbols_to_items()*
|
*vim.lsp.util.symbols_to_items()*
|
||||||
|
symbols_to_items({symbols}, {bufnr}, {position_encoding})
|
||||||
Converts symbols to quickfix list items.
|
Converts symbols to quickfix list items.
|
||||||
|
|
||||||
Parameters: ~
|
Parameters: ~
|
||||||
• {symbols} (`lsp.DocumentSymbol[]|lsp.SymbolInformation[]`) list of
|
• {symbols} (`lsp.DocumentSymbol[]|lsp.SymbolInformation[]`)
|
||||||
symbols
|
list of symbols
|
||||||
• {bufnr} (`integer?`) buffer handle or 0 for current, defaults to
|
• {bufnr} (`integer?`) buffer handle or 0 for current,
|
||||||
current
|
defaults to current
|
||||||
|
• {position_encoding} (`'utf-8'|'utf-16'|'utf-32'?`) default to first
|
||||||
|
client of buffer
|
||||||
|
|
||||||
Return: ~
|
Return: ~
|
||||||
(`vim.quickfix.entry[]`) See |setqflist()| for the format
|
(`vim.quickfix.entry[]`) See |setqflist()| for the format
|
||||||
|
@ -133,6 +133,7 @@ LSP
|
|||||||
• |vim.lsp.util.make_position_params()|, |vim.lsp.util.make_range_params()|
|
• |vim.lsp.util.make_position_params()|, |vim.lsp.util.make_range_params()|
|
||||||
and |vim.lsp.util.make_given_range_params()| now require the `position_encoding`
|
and |vim.lsp.util.make_given_range_params()| now require the `position_encoding`
|
||||||
parameter.
|
parameter.
|
||||||
|
• |vim.lsp.util.symbols_to_items()| now requires the `position_encoding` parameter.
|
||||||
|
|
||||||
LUA
|
LUA
|
||||||
|
|
||||||
|
@ -231,7 +231,7 @@ end
|
|||||||
---
|
---
|
||||||
--- The returned function has an optional {config} parameter that accepts |vim.lsp.ListOpts|
|
--- The returned function has an optional {config} parameter that accepts |vim.lsp.ListOpts|
|
||||||
---
|
---
|
||||||
---@param map_result fun(resp, bufnr: integer): table to convert the response
|
---@param map_result fun(resp, bufnr: integer, position_encoding: 'utf-8'|'utf-16'|'utf-32'): table to convert the response
|
||||||
---@param entity string name of the resource used in a `not found` error message
|
---@param entity string name of the resource used in a `not found` error message
|
||||||
---@param title_fn fun(ctx: lsp.HandlerContext): string Function to call to generate list title
|
---@param title_fn fun(ctx: lsp.HandlerContext): string Function to call to generate list title
|
||||||
---@return lsp.Handler
|
---@return lsp.Handler
|
||||||
@ -244,7 +244,8 @@ local function response_to_list(map_result, entity, title_fn)
|
|||||||
end
|
end
|
||||||
config = config or {}
|
config = config or {}
|
||||||
local title = title_fn(ctx)
|
local title = title_fn(ctx)
|
||||||
local items = map_result(result, ctx.bufnr)
|
local client = assert(vim.lsp.get_client_by_id(ctx.client_id))
|
||||||
|
local items = map_result(result, ctx.bufnr, client.offset_encoding)
|
||||||
|
|
||||||
local list = { title = title, items = items, context = ctx }
|
local list = { title = title, items = items, context = ctx }
|
||||||
if config.on_list then
|
if config.on_list then
|
||||||
|
@ -1777,9 +1777,18 @@ end
|
|||||||
---
|
---
|
||||||
---@param symbols lsp.DocumentSymbol[]|lsp.SymbolInformation[] list of symbols
|
---@param symbols lsp.DocumentSymbol[]|lsp.SymbolInformation[] list of symbols
|
||||||
---@param bufnr? integer buffer handle or 0 for current, defaults to current
|
---@param bufnr? integer buffer handle or 0 for current, defaults to current
|
||||||
|
---@param position_encoding? 'utf-8'|'utf-16'|'utf-32'
|
||||||
|
--- default to first client of buffer
|
||||||
---@return vim.quickfix.entry[] # See |setqflist()| for the format
|
---@return vim.quickfix.entry[] # See |setqflist()| for the format
|
||||||
function M.symbols_to_items(symbols, bufnr)
|
function M.symbols_to_items(symbols, bufnr, position_encoding)
|
||||||
bufnr = vim._resolve_bufnr(bufnr)
|
bufnr = vim._resolve_bufnr(bufnr)
|
||||||
|
if position_encoding == nil then
|
||||||
|
vim.notify_once(
|
||||||
|
'symbols_to_items must be called with valid position encoding',
|
||||||
|
vim.log.levels.WARN
|
||||||
|
)
|
||||||
|
position_encoding = vim.lsp.get_clients({ bufnr = 0 })[1].offset_encoding
|
||||||
|
end
|
||||||
|
|
||||||
local items = {} --- @type vim.quickfix.entry[]
|
local items = {} --- @type vim.quickfix.entry[]
|
||||||
for _, symbol in ipairs(symbols) do
|
for _, symbol in ipairs(symbols) do
|
||||||
@ -1800,9 +1809,9 @@ function M.symbols_to_items(symbols, bufnr)
|
|||||||
local kind = protocol.SymbolKind[symbol.kind] or 'Unknown'
|
local kind = protocol.SymbolKind[symbol.kind] or 'Unknown'
|
||||||
|
|
||||||
local lnum = range['start'].line + 1
|
local lnum = range['start'].line + 1
|
||||||
local col = range['start'].character + 1
|
local col = get_line_byte_from_position(bufnr, range['start'], position_encoding) + 1
|
||||||
local end_lnum = range['end'].line + 1
|
local end_lnum = range['end'].line + 1
|
||||||
local end_col = range['end'].character + 1
|
local end_col = get_line_byte_from_position(bufnr, range['end'], position_encoding) + 1
|
||||||
|
|
||||||
items[#items + 1] = {
|
items[#items + 1] = {
|
||||||
filename = filename,
|
filename = filename,
|
||||||
@ -1816,7 +1825,7 @@ function M.symbols_to_items(symbols, bufnr)
|
|||||||
end
|
end
|
||||||
|
|
||||||
if symbol.children then
|
if symbol.children then
|
||||||
list_extend(items, M.symbols_to_items(symbol.children, bufnr))
|
list_extend(items, M.symbols_to_items(symbol.children, bufnr, position_encoding))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -2930,6 +2930,8 @@ describe('LSP', function()
|
|||||||
local expected = {
|
local expected = {
|
||||||
{
|
{
|
||||||
col = 1,
|
col = 1,
|
||||||
|
end_col = 1,
|
||||||
|
end_lnum = 2,
|
||||||
filename = '',
|
filename = '',
|
||||||
kind = 'File',
|
kind = 'File',
|
||||||
lnum = 2,
|
lnum = 2,
|
||||||
@ -2937,6 +2939,8 @@ describe('LSP', function()
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
col = 1,
|
col = 1,
|
||||||
|
end_col = 1,
|
||||||
|
end_lnum = 4,
|
||||||
filename = '',
|
filename = '',
|
||||||
kind = 'Module',
|
kind = 'Module',
|
||||||
lnum = 4,
|
lnum = 4,
|
||||||
@ -2944,6 +2948,8 @@ describe('LSP', function()
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
col = 1,
|
col = 1,
|
||||||
|
end_col = 1,
|
||||||
|
end_lnum = 6,
|
||||||
filename = '',
|
filename = '',
|
||||||
kind = 'Namespace',
|
kind = 'Namespace',
|
||||||
lnum = 6,
|
lnum = 6,
|
||||||
@ -3036,7 +3042,7 @@ describe('LSP', function()
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
return vim.lsp.util.symbols_to_items(doc_syms, nil)
|
return vim.lsp.util.symbols_to_items(doc_syms, nil, 'utf-16')
|
||||||
end)
|
end)
|
||||||
)
|
)
|
||||||
end)
|
end)
|
||||||
@ -3045,6 +3051,8 @@ describe('LSP', function()
|
|||||||
local expected = {
|
local expected = {
|
||||||
{
|
{
|
||||||
col = 1,
|
col = 1,
|
||||||
|
end_col = 1,
|
||||||
|
end_lnum = 2,
|
||||||
filename = '',
|
filename = '',
|
||||||
kind = 'File',
|
kind = 'File',
|
||||||
lnum = 2,
|
lnum = 2,
|
||||||
@ -3052,6 +3060,8 @@ describe('LSP', function()
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
col = 1,
|
col = 1,
|
||||||
|
end_col = 1,
|
||||||
|
end_lnum = 6,
|
||||||
filename = '',
|
filename = '',
|
||||||
kind = 'Namespace',
|
kind = 'Namespace',
|
||||||
lnum = 6,
|
lnum = 6,
|
||||||
@ -3115,7 +3125,7 @@ describe('LSP', function()
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
return vim.lsp.util.symbols_to_items(doc_syms, nil)
|
return vim.lsp.util.symbols_to_items(doc_syms, nil, 'utf-16')
|
||||||
end)
|
end)
|
||||||
)
|
)
|
||||||
end)
|
end)
|
||||||
@ -3125,6 +3135,8 @@ describe('LSP', function()
|
|||||||
local expected = {
|
local expected = {
|
||||||
{
|
{
|
||||||
col = 1,
|
col = 1,
|
||||||
|
end_col = 1,
|
||||||
|
end_lnum = 3,
|
||||||
filename = '/test_a',
|
filename = '/test_a',
|
||||||
kind = 'File',
|
kind = 'File',
|
||||||
lnum = 2,
|
lnum = 2,
|
||||||
@ -3132,6 +3144,8 @@ describe('LSP', function()
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
col = 1,
|
col = 1,
|
||||||
|
end_col = 1,
|
||||||
|
end_lnum = 5,
|
||||||
filename = '/test_b',
|
filename = '/test_b',
|
||||||
kind = 'Module',
|
kind = 'Module',
|
||||||
lnum = 4,
|
lnum = 4,
|
||||||
@ -3181,7 +3195,7 @@ describe('LSP', function()
|
|||||||
containerName = 'TestBContainer',
|
containerName = 'TestBContainer',
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
return vim.lsp.util.symbols_to_items(sym_info, nil)
|
return vim.lsp.util.symbols_to_items(sym_info, nil, 'utf-16')
|
||||||
end)
|
end)
|
||||||
)
|
)
|
||||||
end)
|
end)
|
||||||
|
Reference in New Issue
Block a user