Function: eglot-describe-connection
eglot-describe-connection is an interactive and byte-compiled function
defined in eglot.el.gz.
Signature
(eglot-describe-connection SERVER)
Documentation
Describe SERVER in a dedicated buffer.
Key Bindings
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/eglot.el.gz
(cl-defun eglot-describe-connection
(server &aux
(info (eglot--server-info server))
(project (eglot--project server))
(root (project-root project))
(managed (eglot--managed-buffers server))
(caps (eglot--capabilities server))
(watches (eglot--file-watches server))
(wsconf (eglot--workspace-configuration-plist server))
(sname (eglot--server-name server)))
"Describe SERVER in a dedicated buffer."
(interactive (list (eglot--current-server-or-lose)))
(with-current-buffer
(get-buffer-create (eglot--server-buffer-name server "connection"))
(let ((inhibit-read-only t))
(erase-buffer)
(special-mode)
(setq-local revert-buffer-function
(lambda (&rest _)
(eglot-describe-connection server)))
(cl-flet ((heading (str &optional first)
(unless first (insert "\n"))
(insert (propertize str 'face 'bold) "\n")))
(heading "Server" t)
(insert (format " Name: %s\n" sname))
(insert (format " Version: %s\n" (plist-get info :version)))
(heading "Project")
(insert (format " Nickname: %s\n" (eglot-project-nickname server)))
(insert (format " Root: %s\n" root))
(let ((expanded (expand-file-name root))
(trueroot (eglot--trueroot server)))
(unless (string= root expanded)
(insert (format " Expanded: %s\n" expanded)))
(unless (string= expanded trueroot)
(insert (format " Canonical: %s\n" trueroot))))
(insert (format " As lisp: %s\n" project))
(heading "Major modes")
(insert " "
(mapconcat #'symbol-name (eglot--major-modes server) ", ")
"\n")
(heading (format "Managed buffers (%d)" (length managed)))
(dolist (buf managed)
(if (buffer-live-p buf)
(let ((name (or (buffer-file-name buf) (buffer-name buf))))
(insert " ")
(insert-text-button name
'action (lambda (_) (pop-to-buffer buf))
'follow-link t)
(insert "\n"))
(insert " (dead buffer)\n")))
(heading "Capabilities")
(cl-loop
with enabled = (cl-loop for (k v) on caps by #'cddr
unless (eq v :json-false) collect k)
with col-width = (+ 1 (cl-reduce
#'max enabled :initial-value 0
:key (lambda (k) (length (symbol-name k)))))
for tail on enabled by #'cdddr
do (insert " ")
(cl-loop for k in (seq-take tail 3)
for name = (symbol-name k)
do (insert-text-button
name
'action (let ((v (plist-get caps k)))
(lambda (_)
(pp-eval-expression (list 'quote v))))
'follow-link t)
(insert (make-string (- col-width (length name)) ?\s)))
(insert "\n"))
(heading "Workspace configuration")
(if wsconf
(insert (with-temp-buffer
(insert (jsonrpc--json-encode wsconf))
(ignore-errors (require 'json) (json-pretty-print-buffer))
(replace-regexp-in-string "^" " " (buffer-string)))
"\n")
(insert " (none)\n"))
(heading "File watchers")
(if (zerop (hash-table-count watches))
(insert " (none)\n")
(maphash (lambda (id descs)
(insert (format " %s -> %d watcher%s\n" id
(length descs)
(if (= 1 (length descs)) "" "s"))))
watches))
(heading "Events buffer")
(insert " ")
(insert-text-button "Show events buffer"
'action (lambda (_) (eglot-events-buffer server))
'follow-link t)
(insert "\n")))
(goto-char (point-min))
(display-buffer (current-buffer))))