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

(cherry picked from commit d26db4bfbf)
This commit is contained in:
skewb1k
2025-08-07 05:56:02 +03:00
committed by github-actions[bot]
parent 8f2d6f7ce2
commit 5551da79c1
3 changed files with 18 additions and 10 deletions

View File

@@ -386,17 +386,21 @@ function M.signature_help(config)
return return
end end
-- Show title only if there are multiple clients or multiple signatures.
if total > 1 then
local sfx = total > 1 local sfx = total > 1
and string.format(' (%d/%d)%s', idx, total, can_cycle and ' (<C-s> to cycle)' or '') and string.format(' (%d/%d)%s', idx, total, can_cycle and ' (<C-s> to cycle)' or '')
or '' or ''
config.title = config.title or string.format('Signature Help: %s%s', client.name, sfx) config.title = config.title or string.format('Signature Help: %s%s', client.name, sfx)
if not config.border then -- 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) table.insert(lines, 1, '# ' .. config.title)
if hl then if hl then
hl[1] = hl[1] + 1 hl[1] = hl[1] + 1
hl[3] = hl[3] + 1 hl[3] = hl[3] + 1
end end
end end
end
config._update_win = update_win config._update_win = update_win

View File

@@ -745,6 +745,10 @@ function M.convert_signature_help_to_markdown_lines(signature_help, ft, triggers
if type(doc) == 'string' then if type(doc) == 'string' then
signature.documentation = { kind = 'plaintext', value = doc } signature.documentation = { kind = 'plaintext', value = doc }
end 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) M.convert_input_to_markdown_lines(signature.documentation, contents)
end end
if signature.parameters and #signature.parameters > 0 then if signature.parameters and #signature.parameters > 0 then

View File

@@ -3657,7 +3657,7 @@ describe('LSP', function()
} }
return vim.lsp.util.convert_signature_help_to_markdown_lines(signature_help, 'cs', { ',' }) return vim.lsp.util.convert_signature_help_to_markdown_lines(signature_help, 'cs', { ',' })
end) end)
local expected = { '```cs', 'TestEntity.TestEntity()', '```', 'some doc' } local expected = { '```cs', 'TestEntity.TestEntity()', '```', '---', 'some doc' }
eq(expected, result) eq(expected, result)
end) end)