]> git.eshelyaron.com Git - emacs.git/commitdiff
Eglot: fix bug in eglot--lookup-mode
authorJoão Távora <joaotavora@gmail.com>
Fri, 7 Feb 2025 20:33:41 +0000 (20:33 +0000)
committerEshel Yaron <me@eshelyaron.com>
Sun, 9 Feb 2025 08:44:12 +0000 (09:44 +0100)
When lookup in eglot-server-programs fails, fall back to a
half-decent (((foo-mode . "foo")) . nil) return value.  This
enables interactive M-x eglot for modes not yet registered in
e-s-p.

* lisp/progmodes/eglot.el (eglot--lookup-mode): Fallback when
lookup fails.

(cherry picked from commit 7169a5d5636ddede2fe70a31de098031f20f70b1)

lisp/progmodes/eglot.el

index 2a854af18ac801c411c52aed44af9f83f876af71..9e2385532167fedc57cb86fa15e067ef9661fea2 100644 (file)
@@ -1320,22 +1320,28 @@ in `eglot-server-programs' (which see).
 CONTACT-PROXY is the value of the corresponding
 `eglot-server-programs' entry."
   (cl-loop
+   with lang-from-sym = (lambda (sym &optional language-id)
+                          (cons sym
+                                (or language-id
+                                    (or (get sym 'eglot-language-id)
+                                        (replace-regexp-in-string
+                                         "\\(?:-ts\\)?-mode$" ""
+                                         (symbol-name sym))))))
    for (modes . contact) in eglot-server-programs
    for llists = (mapcar #'eglot--ensure-list
-                           (if (or (symbolp modes) (keywordp (cadr modes)))
-                               (list modes) modes))
+                        (if (or (symbolp modes) (keywordp (cadr modes)))
+                            (list modes) modes))
    for normalized = (mapcar (jsonrpc-lambda (sym &key language-id &allow-other-keys)
-                              (cons sym
-                                    (or language-id
-                                        (or (get sym 'eglot-language-id)
-                                            (replace-regexp-in-string
-                                             "\\(?:-ts\\)?-mode$" ""
-                                             (symbol-name sym))))))
+                              (funcall lang-from-sym sym language-id))
                             llists)
    when (cl-some (lambda (cell)
                    (provided-mode-derived-p mode (car cell)))
                  normalized)
-   return (cons normalized contact)))
+   return (cons normalized contact)
+   ;; If lookup fails at least return some suitable LANGUAGES.
+   finally (cl-return
+            (cons (list (funcall lang-from-sym major-mode))
+                  nil))))
 
 (defun eglot--guess-contact (&optional interactive)
   "Helper for `eglot'.