From 5cab3be111fc1d09c3cfbf5c7a11217cee7bb7d8 Mon Sep 17 00:00:00 2001 From: Yegappan Lakshmanan Date: Thu, 8 Feb 2024 08:10:04 -0800 Subject: [PATCH] Handle label in a signature help when it is a list --- autoload/lsp/signature.vim | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/autoload/lsp/signature.vim b/autoload/lsp/signature.vim index 59fbc08..ca2bed4 100644 --- a/autoload/lsp/signature.vim +++ b/autoload/lsp/signature.vim @@ -90,13 +90,36 @@ export def SignatureHelp(lspserver: dict, sighelp: any): void var hllen: number = 0 var startcol: number = 0 if sig->has_key('parameters') && sighelp->has_key('activeParameter') - var params_len = sig.parameters->len() - if params_len > 0 && sighelp.activeParameter < params_len - var label: string = sig.parameters[sighelp.activeParameter].label - hllen = label->len() - startcol = text->stridx(label) + var params: list> = sig.parameters + var params_len: number = params->len() + var activeParam: number = sighelp.activeParameter + if params_len > 0 && activeParam < params_len + var paramInfo: dict = params[activeParam] + var label: any = paramInfo.label + if label->type() == v:t_string + # label string + var label_str: string = label + hllen = label_str->len() + startcol = text->stridx(label_str) + else + # [inclusive start offset, exclusive end offset] + var label_offset: list = params[activeParam].label + var start_offset: number = label_offset[0] + var end_offset: number = label_offset[1] + + if has('patch-9.0.1629') + # Convert UTF-16 offsets + startcol = text->byteidx(start_offset, true) + var endcol: number = text->byteidx(end_offset, true) + hllen = endcol - startcol + else + startcol = start_offset + hllen = end_offset - start_offset + endif + endif endif endif + if opt.lspOptions.echoSignature :echon "\r\r" :echon '' -- 2.48.1