Function: eglot--lookup-mode
eglot--lookup-mode is a byte-compiled function defined in eglot.el.gz.
Signature
(eglot--lookup-mode MODE)
Documentation
Lookup eglot-server-programs for MODE.
Return (LANGUAGES . CONTACT-PROXY).
LANGUAGES is a list ((MANAGED-MODE . LANGUAGE-ID) ...). MANAGED-MODE is
a major mode also potentially managed by the server that is to manage
MODE. LANGUAGE-ID is string identifying the language to the LSP server.
It's derived from the corresponding mode name, or explicitly specified
in eglot-server-programs (which see).
CONTACT-PROXY is the value of the corresponding
eglot-server-programs entry.
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/eglot.el.gz
(defun eglot--lookup-mode (mode)
"Lookup `eglot-server-programs' for MODE.
Return (LANGUAGES . CONTACT-PROXY).
LANGUAGES is a list ((MANAGED-MODE . LANGUAGE-ID) ...). MANAGED-MODE is
a major mode also potentially managed by the server that is to manage
MODE. LANGUAGE-ID is string identifying the language to the LSP server.
It's derived from the corresponding mode name, or explicitly specified
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))
for normalized = (mapcar (jsonrpc-lambda (sym &key language-id &allow-other-keys)
(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)
;; If lookup fails at least return some suitable LANGUAGES.
finally (cl-return
(cons (list (funcall lang-from-sym major-mode))
nil))))