mirror of
https://github.com/neovim/neovim.git
synced 2024-12-19 18:55:14 -07:00
fix(lsp.util): inconsistent handling of offset_encoding
This commit is contained in:
parent
ff1d7d4299
commit
acbc6a7f91
@ -27,15 +27,20 @@ local function query_definition(pattern)
|
|||||||
return {}
|
return {}
|
||||||
end
|
end
|
||||||
local results = {}
|
local results = {}
|
||||||
|
|
||||||
|
--- @param range lsp.Range
|
||||||
|
--- @param uri string
|
||||||
|
--- @param offset_encoding string
|
||||||
local add = function(range, uri, offset_encoding)
|
local add = function(range, uri, offset_encoding)
|
||||||
table.insert(results, mk_tag_item(pattern, range, uri, offset_encoding))
|
table.insert(results, mk_tag_item(pattern, range, uri, offset_encoding))
|
||||||
end
|
end
|
||||||
|
|
||||||
for client_id, lsp_results in pairs(assert(results_by_client)) do
|
for client_id, lsp_results in pairs(assert(results_by_client)) do
|
||||||
local client = lsp.get_client_by_id(client_id)
|
local client = lsp.get_client_by_id(client_id)
|
||||||
local offset_encoding = client and client.offset_encoding or 'utf-16'
|
local offset_encoding = client and client.offset_encoding or 'utf-16'
|
||||||
local result = lsp_results.result or {}
|
local result = lsp_results.result or {}
|
||||||
if result.range then -- Location
|
if result.range then -- Location
|
||||||
add(result.range, result.uri)
|
add(result.range, result.uri, offset_encoding)
|
||||||
else
|
else
|
||||||
result = result --[[@as (lsp.Location[]|lsp.LocationLink[])]]
|
result = result --[[@as (lsp.Location[]|lsp.LocationLink[])]]
|
||||||
for _, item in pairs(result) do
|
for _, item in pairs(result) do
|
||||||
|
@ -338,6 +338,8 @@ function M.rename(new_name, opts)
|
|||||||
-- Compute early to account for cursor movements after going async
|
-- Compute early to account for cursor movements after going async
|
||||||
local cword = vim.fn.expand('<cword>')
|
local cword = vim.fn.expand('<cword>')
|
||||||
|
|
||||||
|
--- @param range lsp.Range
|
||||||
|
--- @param offset_encoding string
|
||||||
local function get_text_at_range(range, offset_encoding)
|
local function get_text_at_range(range, offset_encoding)
|
||||||
return api.nvim_buf_get_text(
|
return api.nvim_buf_get_text(
|
||||||
bufnr,
|
bufnr,
|
||||||
|
@ -347,7 +347,7 @@ end
|
|||||||
|
|
||||||
--- Position is a https://microsoft.github.io/language-server-protocol/specifications/specification-current/#position
|
--- Position is a https://microsoft.github.io/language-server-protocol/specifications/specification-current/#position
|
||||||
---@param position lsp.Position
|
---@param position lsp.Position
|
||||||
---@param offset_encoding? string utf-8|utf-16|utf-32
|
---@param offset_encoding 'utf-8'|'utf-16'|'utf-32'
|
||||||
---@return integer
|
---@return integer
|
||||||
local function get_line_byte_from_position(bufnr, position, offset_encoding)
|
local function get_line_byte_from_position(bufnr, position, offset_encoding)
|
||||||
-- LSP's line and characters are 0-indexed
|
-- LSP's line and characters are 0-indexed
|
||||||
@ -357,7 +357,7 @@ local function get_line_byte_from_position(bufnr, position, offset_encoding)
|
|||||||
-- character
|
-- character
|
||||||
if col > 0 then
|
if col > 0 then
|
||||||
local line = get_line(bufnr, position.line) or ''
|
local line = get_line(bufnr, position.line) or ''
|
||||||
return M._str_byteindex_enc(line, col, offset_encoding or 'utf-16')
|
return M._str_byteindex_enc(line, col, offset_encoding)
|
||||||
end
|
end
|
||||||
return col
|
return col
|
||||||
end
|
end
|
||||||
@ -512,6 +512,7 @@ function M.apply_text_document_edit(text_document_edit, index, offset_encoding)
|
|||||||
'apply_text_document_edit must be called with valid offset encoding',
|
'apply_text_document_edit must be called with valid offset encoding',
|
||||||
vim.log.levels.WARN
|
vim.log.levels.WARN
|
||||||
)
|
)
|
||||||
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
-- For lists of text document edits,
|
-- For lists of text document edits,
|
||||||
@ -703,6 +704,7 @@ function M.apply_workspace_edit(workspace_edit, offset_encoding)
|
|||||||
'apply_workspace_edit must be called with valid offset encoding',
|
'apply_workspace_edit must be called with valid offset encoding',
|
||||||
vim.log.levels.WARN
|
vim.log.levels.WARN
|
||||||
)
|
)
|
||||||
|
return
|
||||||
end
|
end
|
||||||
if workspace_edit.documentChanges then
|
if workspace_edit.documentChanges then
|
||||||
for idx, change in ipairs(workspace_edit.documentChanges) do
|
for idx, change in ipairs(workspace_edit.documentChanges) do
|
||||||
@ -988,6 +990,7 @@ function M.show_document(location, offset_encoding, opts)
|
|||||||
end
|
end
|
||||||
if offset_encoding == nil then
|
if offset_encoding == nil then
|
||||||
vim.notify_once('show_document must be called with valid offset encoding', vim.log.levels.WARN)
|
vim.notify_once('show_document must be called with valid offset encoding', vim.log.levels.WARN)
|
||||||
|
return false
|
||||||
end
|
end
|
||||||
local bufnr = vim.uri_to_bufnr(uri)
|
local bufnr = vim.uri_to_bufnr(uri)
|
||||||
|
|
||||||
|
@ -2586,7 +2586,7 @@ describe('LSP', function()
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
eq(false, pcall(exec_lua, 'vim.lsp.util.apply_workspace_edit(...)', edit))
|
eq(false, pcall(exec_lua, 'vim.lsp.util.apply_workspace_edit(...)', edit, 'utf-16'))
|
||||||
eq(false, vim.uv.fs_stat(tmpfile) ~= nil)
|
eq(false, vim.uv.fs_stat(tmpfile) ~= nil)
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
|
Loading…
Reference in New Issue
Block a user