diff options
author | Christoph Hasse <hassec@users.noreply.github.com> | 2023-07-25 08:40:13 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-07-25 05:40:13 -0700 |
commit | 20c331915f4e317c615c7cfea469a9baedd2e4f7 (patch) | |
tree | 630a1a0b66f62efd97588296023d432173644062 | |
parent | 898384ac6900aa5cb8ef84d53ad586ecf424a25c (diff) | |
download | rneovim-20c331915f4e317c615c7cfea469a9baedd2e4f7.tar.gz rneovim-20c331915f4e317c615c7cfea469a9baedd2e4f7.tar.bz2 rneovim-20c331915f4e317c615c7cfea469a9baedd2e4f7.zip |
fix(lsp): SignatureHelp docstring is not escaped #16702
Problem:
Nvim LSP client always treats signature.documentation as markdown, even
if the server returns a plain string.
Per https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#signatureInformation
in a SignatureInformation response, the documentation field can be
either "string" or "MarkupContent".
Solution:
If signature.documentation is a string, treat it as "plaintext".
Closes #16563
-rw-r--r-- | runtime/lua/vim/lsp/util.lua | 6 | ||||
-rw-r--r-- | test/functional/plugin/lsp_spec.lua | 4 |
2 files changed, 8 insertions, 2 deletions
diff --git a/runtime/lua/vim/lsp/util.lua b/runtime/lua/vim/lsp/util.lua index 4d3071fd68..738e23ff28 100644 --- a/runtime/lua/vim/lsp/util.lua +++ b/runtime/lua/vim/lsp/util.lua @@ -1002,6 +1002,12 @@ function M.convert_signature_help_to_markdown_lines(signature_help, ft, triggers end list_extend(contents, split(label, '\n', { plain = true })) if signature.documentation then + -- if LSP returns plain string, we treat it as plaintext. This avoids + -- special characters like underscore or similar from being interpreted + -- as markdown font modifiers + if type(signature.documentation) == 'string' then + signature.documentation = { kind = 'plaintext', value = signature.documentation } + 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 index 9a777e2742..7e34946d95 100644 --- a/test/functional/plugin/lsp_spec.lua +++ b/test/functional/plugin/lsp_spec.lua @@ -3006,7 +3006,7 @@ describe('LSP', function() activeSignature = -1, signatures = { { - documentation = "", + documentation = "some doc", label = "TestEntity.TestEntity()", parameters = {} }, @@ -3014,7 +3014,7 @@ describe('LSP', function() } return vim.lsp.util.convert_signature_help_to_markdown_lines(signature_help, 'cs', {','}) ]] - local expected = {'```cs', 'TestEntity.TestEntity()', '```', ''} + local expected = {'```cs', 'TestEntity.TestEntity()', '```', '<text>', 'some doc', '</text>'} eq(expected, result) end) end) |