]> git.eshelyaron.com Git - emacs.git/commitdiff
Handle label offsets in parameterinformation
authorJoão Távora <joaotavora@gmail.com>
Wed, 9 Jan 2019 21:09:35 +0000 (21:09 +0000)
committerJoão Távora <joaotavora@gmail.com>
Wed, 9 Jan 2019 21:09:35 +0000 (21:09 +0000)
At least ccls uses this.

* eglot.el (eglot-client-capabilities): Declare support for
:labelOffsetSupport.
(eglot--sig-info): Handle label offsets in ParameterInformation

GitHub-reference: fix https://github.com/joaotavora/eglot/issues/201

lisp/progmodes/eglot.el

index 2ab4bd864a9bdcab97a2d9df8fde23d27a29cd76..befa6cdf45447c8624cf401e5187a5c955bffcf1 100644 (file)
@@ -477,7 +477,10 @@ treated as in `eglot-dbind'."
                                          :json-false))
                                     :contextSupport t)
              :hover              `(:dynamicRegistration :json-false)
-             :signatureHelp      `(:dynamicRegistration :json-false)
+             :signatureHelp      (list :dynamicRegistration :json-false
+                                       :signatureInformation
+                                       `(:parameterInformation
+                                         (:labelOffsetSupport t)))
              :references         `(:dynamicRegistration :json-false)
              :definition         `(:dynamicRegistration :json-false)
              :documentSymbol     (list
@@ -1992,12 +1995,18 @@ is not active."
                ;; ...perhaps highlight it in the formals list
                (when params-start
                  (goto-char params-start)
-                 (let ((regex (concat "\\<" (regexp-quote label) "\\>"))
-                       (case-fold-search nil))
-                   (when (re-search-forward regex params-end t)
-                     (add-face-text-property
-                      (match-beginning 0) (match-end 0)
-                      'eldoc-highlight-function-argument))))
+                 (pcase-let
+                     ((`(,beg ,end)
+                       (if (stringp label)
+                           (let ((case-fold-search nil))
+                             (and (re-search-forward
+                                   (concat "\\<" (regexp-quote label) "\\>")
+                                   params-end t)
+                                  (list (match-beginning 0) (match-end 0))))
+                         (mapcar #'1+ (append label nil)))))
+                   (add-face-text-property
+                    beg end
+                    'eldoc-highlight-function-argument)))
                ;; ...and/or maybe add its doc on a line by its own.
                (when documentation
                  (goto-char (point-max))