commit d26db4bfbfd6bd6a3f63174e0db09197f4d220af
parent d73f2d9657ff701eb7b0baf03942696cdf9d1ff9
Author: skewb1k <skewb1kunix@gmail.com>
Date: Thu, 7 Aug 2025 05:56:02 +0300
feat(lsp): improve signature help display #35190
- Add delimiter between function signature and documentation, matching hover formatting
- Show title only if there are multiple clients or multiple signatures
- Avoid duplicating the title inside the window if it's already shown in the border
Diffstat:
3 files changed, 18 insertions(+), 10 deletions(-)
diff --git a/runtime/lua/vim/lsp/buf.lua b/runtime/lua/vim/lsp/buf.lua
@@ -404,15 +404,19 @@ function M.signature_help(config)
return
end
- local sfx = total > 1
- and string.format(' (%d/%d)%s', idx, total, can_cycle and ' (<C-s> to cycle)' or '')
- or ''
- config.title = config.title or string.format('Signature Help: %s%s', client.name, sfx)
- if not config.border then
- table.insert(lines, 1, '# ' .. config.title)
- if hl then
- hl[1] = hl[1] + 1
- hl[3] = hl[3] + 1
+ -- Show title only if there are multiple clients or multiple signatures.
+ if total > 1 then
+ local sfx = total > 1
+ and string.format(' (%d/%d)%s', idx, total, can_cycle and ' (<C-s> to cycle)' or '')
+ or ''
+ config.title = config.title or string.format('Signature Help: %s%s', client.name, sfx)
+ -- If no border is set, render title inside the window.
+ if not (config.border or vim.o.winborder ~= '') then
+ table.insert(lines, 1, '# ' .. config.title)
+ if hl then
+ hl[1] = hl[1] + 1
+ hl[3] = hl[3] + 1
+ end
end
end
diff --git a/runtime/lua/vim/lsp/util.lua b/runtime/lua/vim/lsp/util.lua
@@ -822,6 +822,10 @@ function M.convert_signature_help_to_markdown_lines(signature_help, ft, triggers
if type(doc) == 'string' then
signature.documentation = { kind = 'plaintext', value = doc }
end
+ -- Add delimiter if there is documentation to display
+ if signature.documentation.value ~= '' then
+ contents[#contents + 1] = '---'
+ end
M.convert_input_to_markdown_lines(signature.documentation, contents)
end
if signature.parameters and #signature.parameters > 0 then
diff --git a/test/functional/plugin/lsp_spec.lua b/test/functional/plugin/lsp_spec.lua
@@ -3774,7 +3774,7 @@ describe('LSP', function()
}
return vim.lsp.util.convert_signature_help_to_markdown_lines(signature_help, 'cs', { ',' })
end)
- local expected = { '```cs', 'TestEntity.TestEntity()', '```', 'some doc' }
+ local expected = { '```cs', 'TestEntity.TestEntity()', '```', '---', 'some doc' }
eq(expected, result)
end)