Eglot: load built-in GNU ELPA dependencies explicitly

Because of outstanding bug#62576, it's way to easy for users to get
confused by the M-x package-install process for Eglot.

Whenever an Eglot release depends on a new version of a GNU ELPA :core
package which is _also_ provided built-in, M-x package-install will
install that dependency, but will not always load it on top of the
built-in one.

The solution is to not use "require" for now.  This may potentially
lead to double "loads", but that should in principle be idempotent.

* lisp/progmodes/eglot.el (project, eldoc, seq, flymake, xref, jsonrpc)
(external-completion): Load, don't require.
This commit is contained in:
João Távora 2023-04-02 23:31:10 +01:00
parent ad1efe5e67
commit bdb400912e

View file

@ -97,34 +97,30 @@
(require 'imenu)
(require 'cl-lib)
(require 'project)
(require 'url-parse)
(require 'url-util)
(require 'pcase)
(require 'compile) ; for some faces
(require 'warnings)
(require 'flymake)
(require 'xref)
(eval-when-compile
(require 'subr-x))
(require 'jsonrpc)
(require 'filenotify)
(require 'ert)
(require 'array)
(require 'external-completion)
;; ElDoc is preloaded in Emacs, so `require'-ing won't guarantee we are
;; using the latest version from GNU Elpa when we load eglot.el. Use an
;; heuristic to see if we need to `load' it in Emacs < 28.
(if (and (< emacs-major-version 28)
(not (boundp 'eldoc-documentation-strategy)))
(load "eldoc")
(require 'eldoc))
;; Similar issue as above for Emacs 26.3 and seq.el.
(if (< emacs-major-version 27)
(load "seq")
(require 'seq))
;; These dependencies are also GNU ELPA core packages. Because of
;; bug#62576, since there is a risk that M-x package-install, despite
;; having installed them, didn't correctly re-load them over the
;; built-in versions.
(eval-and-compile
(load "project")
(load "eldoc")
(load "seq")
(load "flymake")
(load "xref")
(load "jsonrpc")
(load "external-completion"))
;; forward-declare, but don't require (Emacs 28 doesn't seem to care)
(defvar markdown-fontify-code-blocks-natively)