Fix #3789: fix eglot lookup-documentation handler
Eglot replaced `eglot-help-at-point' in joaotavora/eglot@a044dec, breaking our documentation lookup handler.
This commit is contained in:
parent
f6f90c9791
commit
9e9b95f49c
2 changed files with 29 additions and 9 deletions
|
@ -16,11 +16,11 @@
|
||||||
eglot-auto-display-help-buffer nil)
|
eglot-auto-display-help-buffer nil)
|
||||||
|
|
||||||
:config
|
:config
|
||||||
(set-popup-rule! "^\\*eglot-help" :size 0.35 :quit t :select t)
|
(set-popup-rule! "^\\*eglot-help" :size 0.15 :quit t :select t)
|
||||||
(set-lookup-handlers! 'eglot--managed-mode
|
(set-lookup-handlers! 'eglot--managed-mode
|
||||||
:implementations #'eglot-find-implementation
|
:implementations #'eglot-find-implementation
|
||||||
:type-definition #'eglot-find-typeDefinition
|
:type-definition #'eglot-find-typeDefinition
|
||||||
:documentation #'+eglot/documentation-lookup-handler)
|
:documentation #'+eglot-lookup-documentation)
|
||||||
(when (featurep! :checkers syntax)
|
(when (featurep! :checkers syntax)
|
||||||
(after! flycheck
|
(after! flycheck
|
||||||
(load! "autoload/flycheck-eglot"))))
|
(load! "autoload/flycheck-eglot"))))
|
||||||
|
|
|
@ -9,11 +9,31 @@ Example : (set-eglot-client! 'python-mode `(,(concat doom-etc-dir \"lsp/mspyls/M
|
||||||
(after! eglot
|
(after! eglot
|
||||||
(add-to-list 'eglot-server-programs `(,mode . ,server-call))))
|
(add-to-list 'eglot-server-programs `(,mode . ,server-call))))
|
||||||
|
|
||||||
|
;; HACK Eglot removed `eglot-help-at-point' in joaotavora/eglot@a044dec for a
|
||||||
|
;; more problematic approach of deferred to eldoc. Here, I've restored it.
|
||||||
|
;; Doom's lookup handlers try to open documentation in a separate window
|
||||||
|
;; (so they can be copied or kept open), but doing so with an eldoc buffer
|
||||||
|
;; is difficult because a) its contents are generated asynchronously,
|
||||||
|
;; making them tough to scrape, and b) their contents change frequently
|
||||||
|
;; (every time you move your cursor).
|
||||||
|
(defvar +eglot--help-buffer nil)
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
(defun +eglot/documentation-lookup-handler ()
|
(defun +eglot-lookup-documentation (_identifier)
|
||||||
"Documentation lookup handler using eglot :document/hover handler.
|
"Request documentation for the thing at point."
|
||||||
|
(eglot--dbind ((Hover) contents range)
|
||||||
Mostly a rewrite of `eglot-help-at-point', which should be used interactively."
|
(jsonrpc-request (eglot--current-server-or-lose) :textDocument/hover
|
||||||
(interactive)
|
(eglot--TextDocumentPositionParams))
|
||||||
(eglot-help-at-point)
|
(let ((blurb (and (not (seq-empty-p contents))
|
||||||
(display-buffer eglot--help-buffer))
|
(eglot--hover-info contents range)))
|
||||||
|
(hint (thing-at-point 'symbol)))
|
||||||
|
(if blurb
|
||||||
|
(with-current-buffer
|
||||||
|
(or (and (buffer-live-p +eglot--help-buffer)
|
||||||
|
+eglot--help-buffer)
|
||||||
|
(setq +eglot--help-buffer (generate-new-buffer "*eglot-help*")))
|
||||||
|
(with-help-window (current-buffer)
|
||||||
|
(rename-buffer (format "*eglot-help for %s*" hint))
|
||||||
|
(with-current-buffer standard-output (insert blurb))
|
||||||
|
(setq-local nobreak-char-display nil)))
|
||||||
|
(display-local-help))))
|
||||||
|
'deferred)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue