Skip to content

Commit 1f579a0

Browse files
committed
[lsp-ui-doc] Use lsp-eldoc-hooks
1 parent e3db7a9 commit 1f579a0

File tree

1 file changed

+27
-37
lines changed

1 file changed

+27
-37
lines changed

Diff for: lsp-ui-doc.el

+27-37
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,6 @@ They are added to `markdown-code-lang-modes'")
148148
The functions receive 2 parameters: the frame and its window.")
149149

150150
(defvar-local lsp-ui-doc--bounds nil)
151-
(defvar-local lsp-ui-doc--string-eldoc nil)
152151

153152
(declare-function lsp-ui-sideline--get-renderer 'lsp-ui-sideline)
154153

@@ -194,17 +193,6 @@ Because some variables are buffer local.")
194193
(frame-parameter nil 'name))
195194
"*"))
196195

197-
(defun lsp-ui-doc--set-eldoc (marked-string)
198-
(when marked-string
199-
(let ((string (lsp-ui-doc--extract-marked-string marked-string)))
200-
(setq lsp-ui-doc--string-eldoc string))))
201-
202-
(defun lsp-ui-doc--eldoc (&rest _)
203-
(when (and (lsp--capability "documentHighlightProvider")
204-
lsp-highlight-symbol-at-point)
205-
(lsp-symbol-highlight))
206-
lsp-ui-doc--string-eldoc)
207-
208196
;; ‘markdown-fontify-code-block-default-mode’ isn’t yet available in
209197
;; Markdown 2.3.
210198
(defvar markdown-fontify-code-block-default-mode)
@@ -268,7 +256,9 @@ MODE is the mode used in the parent frame."
268256
(let ((groups (--separate (and (hash-table-p it)
269257
(lsp-ui-sideline--get-renderer (gethash "language" it)))
270258
(append list-marked-string nil))))
271-
(lsp-ui-doc--set-eldoc (caar groups))
259+
(when-let ((marked-string (caar groups)))
260+
;; Without run-with-idle-timer, echo area will be cleared after displaying the message instantly.
261+
(run-with-idle-timer 0 nil (lambda () (eldoc-message (lsp-ui-doc--extract-marked-string marked-string)))))
272262
(if lsp-ui-doc-include-signature
273263
list-marked-string
274264
(cadr groups))))
@@ -291,27 +281,30 @@ We don't extract the string that `lps-line' is already displaying."
291281
((gethash "language" contents) ;; MarkedString
292282
(lsp-ui-doc--extract-marked-string contents)))))
293283

294-
(defun lsp-ui-doc--make-request ()
284+
(defun lsp-ui-doc--hover (orig-fn)
295285
"Request the documentation to the LS."
296-
(when (and (bound-and-true-p lsp--cur-workspace)
297-
(not (bound-and-true-p lsp-ui-peek-mode))
298-
(lsp--capability "hoverProvider"))
299-
(cond
300-
((symbol-at-point)
301-
(let ((bounds (bounds-of-thing-at-point 'symbol)))
302-
(unless (equal lsp-ui-doc--bounds bounds)
286+
(if lsp-ui-doc-mode
287+
(when (and (bound-and-true-p lsp--cur-workspace)
288+
(not (bound-and-true-p lsp-ui-peek-mode))
289+
(lsp--capability "hoverProvider"))
290+
(cond
291+
((symbol-at-point)
292+
(let ((bounds (bounds-of-thing-at-point 'symbol)))
293+
(unless (equal lsp-ui-doc--bounds bounds)
294+
(lsp--send-request-async (lsp--make-request "textDocument/hover"
295+
(lsp--text-document-position-params))
296+
(lambda (hover)
297+
(lsp-ui-doc--callback hover bounds))))))
298+
((looking-at "[[:graph:]]")
303299
(lsp--send-request-async (lsp--make-request "textDocument/hover"
304300
(lsp--text-document-position-params))
305301
(lambda (hover)
306-
(lsp-ui-doc--callback hover bounds))))))
307-
((looking-at "[[:graph:]]")
308-
(lsp--send-request-async (lsp--make-request "textDocument/hover"
309-
(lsp--text-document-position-params))
310-
(lambda (hover)
311-
(lsp-ui-doc--callback hover (cons (point) (1+ (point)))))))
312-
(t
313-
(setq lsp-ui-doc--string-eldoc nil)
314-
(lsp-ui-doc--hide-frame)))))
302+
(lsp-ui-doc--callback hover (cons (point) (1+ (point)))))))
303+
(t
304+
(eldoc-message nil)
305+
(lsp-ui-doc--hide-frame))))
306+
(funcall orig-fn))
307+
nil)
315308

316309
(defun lsp-ui-doc--callback (hover bounds)
317310
"Process the received documentation.
@@ -323,7 +316,7 @@ BUFFER is the buffer where the request has been made."
323316
(let ((doc (lsp-ui-doc--extract (gethash "contents" hover))))
324317
(setq lsp-ui-doc--bounds bounds)
325318
(lsp-ui-doc--display (thing-at-point 'symbol t) doc))
326-
(setq lsp-ui-doc--string-eldoc nil)
319+
(eldoc-message nil)
327320
(lsp-ui-doc--hide-frame)))
328321

329322
(defun lsp-ui-doc--hide-frame ()
@@ -643,14 +636,11 @@ HEIGHT is the documentation number of lines."
643636
;; ‘frameset-filter-alist’ for explanation.
644637
(cl-callf copy-tree frameset-filter-alist)
645638
(push '(lsp-ui-doc-frame . :never) frameset-filter-alist)))
646-
(add-hook 'lsp-after-open-hook 'lsp-ui-doc-enable-eldoc nil t)
647-
(add-hook 'post-command-hook 'lsp-ui-doc--make-request nil t)
639+
640+
(advice-add 'lsp-hover :around #'lsp-ui-doc--hover)
648641
(add-hook 'delete-frame-functions 'lsp-ui-doc--on-delete nil t)))
649642
(t
650-
(remove-hook 'delete-frame-functions 'lsp-ui-doc--on-delete t)
651-
(remove-hook 'post-command-hook 'lsp-ui-doc--make-request t)
652-
(remove-hook 'lsp-after-open-hook 'lsp-ui-doc-enable-eldoc t)
653-
(setq-local eldoc-documentation-function 'lsp--on-hover))))
643+
(remove-hook 'delete-frame-functions 'lsp-ui-doc--on-delete t))))
654644

655645
(defun lsp-ui-doc-enable (enable)
656646
"Enable/disable ‘lsp-ui-doc-mode’.

0 commit comments

Comments
 (0)