fix(lsp): handle negative activeSignature in signatureHelp (#17064)

omnisharp-roslyn can send negative values:

    {
      activeParameter = 0,
      activeSignature = -1,
      signatures = { {
          documentation = "",
          label = "TestEntity.TestEntity()",
          parameters = {}
        } }
    }

In 3.16 of the specification `activeSignature` is defined as `uinteger`
and therefore negative values shouldn't be allowed, but within 3.15 it
was defined as `number` which makes me think we can be a bit lenient in
this case and handle them.

The expected behavior is quite clear:

    The active signature. If omitted or the value lies outside the
    range of `signatures` the value defaults to zero or is ignored if
    the `SignatureHelp` has no signatures.

Fixes an error:

    util.lua:1685: attempt to get length of local 'lines' (a nil value)
    util.lua:1685: in function 'trim_empty_lines'
    handlers.lua:334: in function 'textDocument/signatureHelp'
This commit is contained in:
Mathias Fußenegger
2022-01-13 10:47:36 +01:00
committed by GitHub
parent 43ef7df22d
commit e7cd811567
2 changed files with 23 additions and 1 deletions

View File

@@ -2333,6 +2333,27 @@ describe('LSP', function()
end)
end)
describe('lsp.util.convert_signature_help_to_markdown_lines', function()
it('can handle negative activeSignature', function()
local result = exec_lua[[
local signature_help = {
activeParameter = 0,
activeSignature = -1,
signatures = {
{
documentation = "",
label = "TestEntity.TestEntity()",
parameters = {}
},
}
}
return vim.lsp.util.convert_signature_help_to_markdown_lines(signature_help, 'cs', {','})
]]
local expected = {'```cs', 'TestEntity.TestEntity()', '```', ''}
eq(expected, result)
end)
end)
describe('lsp.util.get_effective_tabstop', function()
local function test_tabstop(tabsize, softtabstop)
exec_lua(string.format([[