Skip to content

Commit

Permalink
Eglot: respect user's Eldoc configuration by default
Browse files Browse the repository at this point in the history
This change addresses the problems reported in many Elglot reports
dating back to early 2021 at least:

  joaotavora/eglot#648
  joaotavora/eglot#894
  joaotavora/eglot#920
  joaotavora/eglot#1031
  joaotavora/eglot#1171

In one form or another, the reports point out that the multiple pieces
of information about the "thing at point" made available by the LSP
server are not all being considered by the ElDoc system.

The reason for this is Eglot setting/trampling the variables
'eldoc-documentation-strategy' and 'eldoc-documentation-functions' in
its minor more entry function.

The reason it did that is historical and is partially described in the
issues above.  But, evidently, it never made much sense, because so
many people want to override it, which requires setting
'eldoc-documentation-strategy' to the non-default value
'eldoc-documentation-compose'.

The problem was made worse by the fact that setting it as usual in
either the Customize menu or their init file didn't work, requiring a
fairly complex Elisp snippet.  That is now solved as of this commit.

If the user does not do any setting, then Eglot works basically the
same as before (i.e. shows only one piece of information).

It is arguable that the default value for
'eldoc-documentation-strategy' should change globally to
'eldoc-documentation-compose', but that has other subtle implications
and is not part of this commit.

* lisp/progmodes/eglot.el (eglot--managed-mode): Don't set Eldoc
variables greedily.
  • Loading branch information
joaotavora committed Feb 20, 2023
1 parent 5d0b45c commit e83c78b
Showing 1 changed file with 6 additions and 6 deletions.
12 changes: 6 additions & 6 deletions lisp/progmodes/eglot.el
Original file line number Diff line number Diff line change
Expand Up @@ -1760,11 +1760,6 @@ Use `eglot-managed-p' to determine if current buffer is managed.")
(add-hook 'change-major-mode-hook #'eglot--managed-mode-off nil t)
(add-hook 'post-self-insert-hook 'eglot--post-self-insert-hook nil t)
(add-hook 'pre-command-hook 'eglot--pre-command-hook nil t)
(eglot--setq-saving eldoc-documentation-functions
'(eglot-signature-eldoc-function
eglot-hover-eldoc-function))
(eglot--setq-saving eldoc-documentation-strategy
#'eldoc-documentation-enthusiast)
(eglot--setq-saving xref-prompt-for-identifier nil)
(eglot--setq-saving flymake-diagnostic-functions '(eglot-flymake-backend))
(eglot--setq-saving company-backends '(company-capf))
Expand All @@ -1773,7 +1768,12 @@ Use `eglot-managed-p' to determine if current buffer is managed.")
(add-function :before-until (local 'imenu-create-index-function)
#'eglot-imenu))
(unless (eglot--stay-out-of-p 'flymake) (flymake-mode 1))
(unless (eglot--stay-out-of-p 'eldoc) (eldoc-mode 1))
(unless (eglot--stay-out-of-p 'eldoc)
(add-hook 'eldoc-documentation-functions #'eglot-hover-eldoc-function
nil t)
(add-hook 'eldoc-documentation-functions #'eglot-signature-eldoc-function
nil t)
(eldoc-mode 1))
(cl-pushnew (current-buffer) (eglot--managed-buffers (eglot-current-server))))
(t
(remove-hook 'after-change-functions 'eglot--after-change t)
Expand Down

0 comments on commit e83c78b

Please sign in to comment.