From d2cca606a1b67a7e9e093154449f35eaacab0532 Mon Sep 17 00:00:00 2001 From: Maria José Solano Date: Sat, 22 Feb 2025 13:19:00 -0800 Subject: fix(float): ensure floating window width can fit title --- runtime/lua/vim/lsp/util.lua | 5 +++++ test/functional/plugin/lsp_spec.lua | 14 ++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/runtime/lua/vim/lsp/util.lua b/runtime/lua/vim/lsp/util.lua index 9e84e27205..905b9822ba 100644 --- a/runtime/lua/vim/lsp/util.lua +++ b/runtime/lua/vim/lsp/util.lua @@ -1417,6 +1417,11 @@ function M._make_floating_popup_size(contents, opts) -- make sure borders are always inside the screen width = math.min(width, screen_width - border_width) + -- Make sure that the width is large enough to fit the title. + if opts.title then + width = math.max(width, vim.fn.strdisplaywidth(opts.title)) + end + if wrap_at then wrap_at = math.min(wrap_at, width) end diff --git a/test/functional/plugin/lsp_spec.lua b/test/functional/plugin/lsp_spec.lua index a0064f741e..17e3fbbf70 100644 --- a/test/functional/plugin/lsp_spec.lua +++ b/test/functional/plugin/lsp_spec.lua @@ -3528,6 +3528,20 @@ describe('LSP', function() end) ) end) + + it('considers title when computing width', function() + eq( + { 17, 2 }, + exec_lua(function() + return { + vim.lsp.util._make_floating_popup_size( + { 'foo', 'bar' }, + { title = 'A very long title' } + ), + } + end) + ) + end) end) describe('lsp.util.trim.trim_empty_lines', function() -- cgit