Function: eglot--interface
eglot--interface is a byte-compiled function defined in eglot.el.gz.
Signature
(eglot--interface INTERFACE-NAME)
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/eglot.el.gz
(eval-and-compile
(defun eglot--keywordize-vars (vars)
(mapcar (lambda (var) (intern (format ":%s" var))) vars))
(defun eglot--ensure-type (k) (if (consp k) k (cons k t)))
(defun eglot--interface (interface-name)
(let* ((interface (assoc interface-name eglot--lsp-interface-alist))
(required (mapcar #'eglot--ensure-type (car (cdr interface))))
(optional (mapcar #'eglot--ensure-type (cadr (cdr interface)))))
(list :types (append required optional)
:required-keys (mapcar #'car required)
:optional-keys (mapcar #'car optional))))
(defun eglot--check-dspec (interface-name dspec)
"Check destructuring spec DSPEC against INTERFACE-NAME."
(cl-destructuring-bind (&key required-keys optional-keys &allow-other-keys)
(eglot--interface interface-name)
(cond ((or required-keys optional-keys)
(let ((too-many
(and
(memq 'disallow-non-standard-keys eglot-strict-mode)
(cl-set-difference
(eglot--keywordize-vars dspec)
(append required-keys optional-keys))))
(ignored-required
(and
(memq 'enforce-required-keys eglot-strict-mode)
(cl-set-difference
required-keys (eglot--keywordize-vars dspec))))
(missing-out
(and
(memq 'enforce-optional-keys eglot-strict-mode)
(cl-set-difference
optional-keys (eglot--keywordize-vars dspec)))))
(when too-many (byte-compile-warn
"Destructuring for %s has extraneous %s"
interface-name too-many))
(when ignored-required (byte-compile-warn
"Destructuring for %s ignores required %s"
interface-name ignored-required))
(when missing-out (byte-compile-warn
"Destructuring for %s is missing out on %s"
interface-name missing-out))))
((memq 'no-unknown-interfaces eglot-strict-mode)
(byte-compile-warn "Unknown LSP interface %s" interface-name))))))