mirror of
				https://github.com/neovim/neovim.git
				synced 2025-11-04 09:44:31 +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