(eglot--dbind ((SignatureInformation) label documentation parameters) sig
(with-temp-buffer
(save-excursion (insert label))
- (when (looking-at "\\([^(]+\\)(")
- (add-face-text-property (match-beginning 1) (match-end 1)
- 'font-lock-function-name-face))
-
- (when (and (stringp documentation) (eql i active-sig)
- (string-match "[[:space:]]*\\([^.\r\n]+[.]?\\)"
- documentation))
- (setq documentation (match-string 1 documentation))
- (unless (string-prefix-p (string-trim documentation) label)
- (goto-char (point-max))
- (insert ": " (eglot--format-markup documentation))))
- (when (and (eql i active-sig) active-param
- (< -1 active-param (length parameters)))
- (eglot--dbind ((ParameterInformation) label documentation)
- (aref parameters active-param)
- (goto-char (point-min))
- (let ((case-fold-search nil))
- (cl-loop for nmatches from 0
- while (and (not (string-empty-p label))
- (search-forward label nil t))
- finally do
- (when (= 1 nmatches)
- (add-face-text-property
- (- (point) (length label)) (point)
- 'eldoc-highlight-function-argument))))
- (when documentation
+ (let ((params-start (point-min))
+ (params-end (point-max)))
+ (when (looking-at "\\([^(]+\\)(")
+ (setq params-start (match-end 0))
+ (add-face-text-property (match-beginning 1) (match-end 1)
+ 'font-lock-function-name-face))
+
+ (when (and (stringp documentation) (eql i active-sig)
+ (string-match "[[:space:]]*\\([^.\r\n]+[.]?\\)"
+ documentation))
+ (setq documentation (match-string 1 documentation))
+ (unless (string-prefix-p (string-trim documentation) label)
(goto-char (point-max))
- (insert "\n"
- (propertize
- label 'face 'eldoc-highlight-function-argument)
- ": " (eglot--format-markup documentation)))))
- (buffer-string)))
+ (insert ": " (eglot--format-markup documentation))))
+ (when (and (eql i active-sig) active-param
+ (< -1 active-param (length parameters)))
+ (eglot--dbind ((ParameterInformation) label documentation)
+ (aref parameters active-param)
+ (goto-char params-start)
+ (let ((case-fold-search nil))
+ (cl-loop for nmatches from 0
+ while (and (not (string-empty-p label))
+ (search-forward label params-end t))
+ finally do
+ (when (= 1 nmatches)
+ (add-face-text-property
+ (- (point) (length label)) (point)
+ 'eldoc-highlight-function-argument))))
+ (when documentation
+ (goto-char (point-max))
+ (insert "\n"
+ (propertize
+ label 'face 'eldoc-highlight-function-argument)
+ ": " (eglot--format-markup documentation)))))
+ (buffer-string))))
when moresigs concat "\n"))
(defun eglot-help-at-point ()