diff options
| author | skewb1k <skewb1kunix@gmail.com> | 2025-08-12 00:31:57 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-08-11 14:31:57 -0700 |
| commit | 7cc07e8383327f0701edccbe77120ceea2673bfa (patch) | |
| tree | e879d50114cbf2e0e9e2f5960d9baa6a7674a650 /runtime/lua/vim/lsp/util.lua | |
| parent | be5a4851eaa5db19102b66042d42bc8bdba27460 (diff) | |
| download | rneovim-7cc07e8383327f0701edccbe77120ceea2673bfa.tar.gz rneovim-7cc07e8383327f0701edccbe77120ceea2673bfa.tar.bz2 rneovim-7cc07e8383327f0701edccbe77120ceea2673bfa.zip | |
feat(lsp): support signature help noActiveParameterSupport #34838
Diffstat (limited to 'runtime/lua/vim/lsp/util.lua')
| -rw-r--r-- | runtime/lua/vim/lsp/util.lua | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/runtime/lua/vim/lsp/util.lua b/runtime/lua/vim/lsp/util.lua index 753dbad9c4..6c3641e627 100644 --- a/runtime/lua/vim/lsp/util.lua +++ b/runtime/lua/vim/lsp/util.lua @@ -829,18 +829,21 @@ function M.convert_signature_help_to_markdown_lines(signature_help, ft, triggers M.convert_input_to_markdown_lines(signature.documentation, contents) end if signature.parameters and #signature.parameters > 0 then - -- First check if the signature has an activeParameter. If it doesn't check if the response - -- had that property instead. Else just default to 0. - -- - -- NOTE: Using tonumber() as a temporary workaround to handle `vim.NIL` until #34838 is merged - local active_parameter = math.max( - tonumber(signature.activeParameter) or tonumber(signature_help.activeParameter) or 0, - 0 - ) + local active_parameter = signature.activeParameter or signature_help.activeParameter - -- If the activeParameter is > #parameters, then set it to the last - -- NOTE: this is not fully according to the spec, but a client-side interpretation - active_parameter = math.min(active_parameter, #signature.parameters - 1) + -- NOTE: We intentionally violate the LSP spec, which states that if `activeParameter` + -- is not provided or is out-of-bounds, it should default to 0. + -- Instead, we default to `nil`, as most clients do. In practice, 'no active parameter' + -- is better default than 'first parameter' and aligns better with user expectations. + -- Related discussion: https://github.com/microsoft/language-server-protocol/issues/1271 + if + not active_parameter + or active_parameter == vim.NIL + or active_parameter < 0 + or active_parameter >= #signature.parameters + then + return contents, nil + end local parameter = signature.parameters[active_parameter + 1] local parameter_label = parameter.label |