]> Sergey Matveev's repositories - vim-lsp.git/commitdiff
Handle label in a signature help when it is a list
authorYegappan Lakshmanan <yegappan@yahoo.com>
Thu, 8 Feb 2024 16:10:04 +0000 (08:10 -0800)
committerYegappan Lakshmanan <yegappan@yahoo.com>
Thu, 8 Feb 2024 16:10:04 +0000 (08:10 -0800)
autoload/lsp/signature.vim

index 59fbc0856a775c263bf7ed20dc221b0b142015bc..ca2bed459ae302f2dc35dd4a8040117b64f55a10 100644 (file)
@@ -90,13 +90,36 @@ export def SignatureHelp(lspserver: dict<any>, 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<dict<any>> = sig.parameters
+    var params_len: number = params->len()
+    var activeParam: number = sighelp.activeParameter
+    if params_len > 0 && activeParam < params_len
+      var paramInfo: dict<any> = 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<number> = 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 ''