fix(lsp): handle NUL bytes in popup text

Fix #25610

(cherry picked from commit 762a9e138b)
This commit is contained in:
zeertzjq 2023-10-12 15:19:27 +08:00 committed by github-actions[bot]
parent 47354c59bd
commit 9ee75f4781
2 changed files with 14 additions and 2 deletions

View File

@ -1547,7 +1547,7 @@ function M._make_floating_popup_size(contents, opts)
width = 0
for i, line in ipairs(contents) do
-- TODO(ashkan) use nvim_strdisplaywidth if/when that is introduced.
line_widths[i] = vim.fn.strdisplaywidth(line)
line_widths[i] = vim.fn.strdisplaywidth(line:gsub('%z', '\n'))
width = math.max(line_widths[i], width)
end
end
@ -1576,7 +1576,7 @@ function M._make_floating_popup_size(contents, opts)
height = 0
if vim.tbl_isempty(line_widths) then
for _, line in ipairs(contents) do
local line_width = vim.fn.strdisplaywidth(line)
local line_width = vim.fn.strdisplaywidth(line:gsub('%z', '\n'))
height = height + math.ceil(line_width / wrap_at)
end
else

View File

@ -2897,6 +2897,18 @@ describe('LSP', function()
it('calculates size correctly with wrapping', function()
eq({15,5}, exec_lua[[ return {vim.lsp.util._make_floating_popup_size(contents,{width = 15, wrap_at = 14})} ]])
end)
it('handles NUL bytes in text', function()
exec_lua([[ contents = {
'\000\001\002\003\004\005\006\007\008\009',
'\010\011\012\013\014\015\016\017\018\019',
'\020\021\022\023\024\025\026\027\028\029',
} ]])
command('set list listchars=')
eq({20,3}, exec_lua[[ return {vim.lsp.util._make_floating_popup_size(contents)} ]])
command('set display+=uhex')
eq({40,3}, exec_lua[[ return {vim.lsp.util._make_floating_popup_size(contents)} ]])
end)
end)
describe('lsp.util.trim.trim_empty_lines', function()