fix(lsp): minimum height for floating popup #31990

Problem:
The floating window for hover and signature help always cuts off a few lines,
because the `_make_floating_popup_size` function counts empty lines as having
zero height.

Solution:
Ensure the height is at least 1.

(cherry picked from commit a4f575abd8)
This commit is contained in:
Xuyuan Pang
2025-01-14 07:17:23 +08:00
committed by github-actions[bot]
parent 323c43e1c4
commit b0b383bff9
2 changed files with 14 additions and 1 deletions

View File

@ -1626,7 +1626,7 @@ function M._make_floating_popup_size(contents, opts)
if vim.tbl_isempty(line_widths) then
for _, line in ipairs(contents) do
local line_width = vim.fn.strdisplaywidth(line:gsub('%z', '\n'))
height = height + math.ceil(line_width / wrap_at)
height = height + math.max(1, math.ceil(line_width / wrap_at))
end
else
for i = 1, #contents do

View File

@ -3357,6 +3357,19 @@ describe('LSP', function()
command('set display+=uhex')
eq({ 40, 3 }, exec_lua [[ return {vim.lsp.util._make_floating_popup_size(contents)} ]])
end)
it('handles empty line', function()
exec_lua(function()
_G.contents = {
'',
}
end)
eq(
{ 20, 1 },
exec_lua(function()
return { vim.lsp.util._make_floating_popup_size(_G.contents, { width = 20 }) }
end)
)
end)
end)
describe('lsp.util.trim.trim_empty_lines', function()