diff options
-rw-r--r-- | runtime/lua/vim/lsp/util.lua | 4 | ||||
-rw-r--r-- | test/functional/plugin/lsp/utils_spec.lua | 24 |
2 files changed, 27 insertions, 1 deletions
diff --git a/runtime/lua/vim/lsp/util.lua b/runtime/lua/vim/lsp/util.lua index 1219f71427..ef177e903f 100644 --- a/runtime/lua/vim/lsp/util.lua +++ b/runtime/lua/vim/lsp/util.lua @@ -1656,7 +1656,9 @@ function M.open_floating_preview(contents, syntax, opts) if not opts.height then -- Reduce window height if TS highlighter conceals code block backticks. local conceal_height = api.nvim_win_text_height(floating_winnr, {}).all - api.nvim_win_set_height(floating_winnr, conceal_height) + if conceal_height < api.nvim_win_get_height(floating_winnr) then + api.nvim_win_set_height(floating_winnr, conceal_height) + end end end diff --git a/test/functional/plugin/lsp/utils_spec.lua b/test/functional/plugin/lsp/utils_spec.lua index ccefc3cb99..75cc69bed4 100644 --- a/test/functional/plugin/lsp/utils_spec.lua +++ b/test/functional/plugin/lsp/utils_spec.lua @@ -383,4 +383,28 @@ describe('vim.lsp.util', function() | ]]) end) + + it('open_floating_preview height does not exceed max_height', function() + local screen = Screen.new() + exec_lua([[ + vim.lsp.util.open_floating_preview(vim.fn.range(1, 10), 'markdown', { + border = 'single', + width = 5, + max_height = 5, + focus = false, + }) + ]]) + screen:expect([[ + ^ | + ┌─────┐{1: }| + │{4:1 }│{1: }| + │{4:2 }│{1: }| + │{4:3 }│{1: }| + │{4:4 }│{1: }| + │{4:5 }│{1: }| + └─────┘{1: }| + {1:~ }|*5 + | + ]]) + end) end) |