From e5f77f8ca59b899bcc2b77e8e8eb27a2749a9130 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jo=C3=A3o=20T=C3=A1vora?= Date: Sat, 17 Sep 2022 01:28:52 +0100 Subject: [PATCH] Rework readme.md about workspace configuration again Also tweak eglot-show-workspace-configuration a bit. * README.md (Workspace configuration): Rework. * eglot.el (eglot-show-workspace-configuration): Rework. (eglot--workspace-configuration-plist): New helper. GitHub-reference: per https://github.com/joaotavora/eglot/issues/590 --- lisp/progmodes/eglot.el | 43 ++++++++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el index 91733a8d7a6..f02ec73043c 100644 --- a/lisp/progmodes/eglot.el +++ b/lisp/progmodes/eglot.el @@ -58,7 +58,6 @@ ;;; Code: -(require 'json) (require 'imenu) (require 'cl-lib) (require 'project) @@ -2204,23 +2203,28 @@ SECTION should be a keyword or a string. VALUE is a plist or a primitive type converted to JSON. The value of this variable can also be a unary function of a -`eglot-lsp-server' instance, the server connection requesting the -configuration. It should return an alist of the format described -above.") +single argument, which will be a connected `eglot-lsp-server' +instance. The function runs with `default-directory' set to the +root of the current project. It should return an alist of the +format described above.") ;;;###autoload (put 'eglot-workspace-configuration 'safe-local-variable 'listp) -(defun eglot-show-configuration (server) - "Dump `eglot-workspace-configuration' as json for debugging." - (interactive (list (eglot--read-server "Server configuration" - (eglot-current-server)))) - (let ((conf (eglot--workspace-configuration server))) - (with-current-buffer (get-buffer-create " *eglot configuration*") +(defun eglot-show-workspace-configuration (&optional server) + "Dump `eglot-workspace-configuration' as JSON for debugging." + (interactive (list (and (eglot-current-server) + (eglot--read-server "Server configuration" + (eglot-current-server))))) + (let ((conf (eglot--workspace-configuration-plist server))) + (with-current-buffer (get-buffer-create "*EGLOT workspace configuration*") (erase-buffer) (insert (jsonrpc--json-encode conf)) - (json-mode) - (json-pretty-print-buffer) + (with-no-warnings + (require 'json) + (require 'json-mode) + (json-mode) + (json-pretty-print-buffer)) (pop-to-buffer (current-buffer))))) (defun eglot--workspace-configuration (server) @@ -2228,6 +2232,14 @@ above.") (funcall eglot-workspace-configuration server) eglot-workspace-configuration)) +(defun eglot--workspace-configuration-plist (server) + "Returns `eglot-workspace-configuraiton' suitable serialization." + (or (cl-loop for (section . v) in (eglot--workspace-configuration server) + collect (if (keywordp section) section + (intern (format ":%s" section))) + collect v) + eglot--{})) + (defun eglot-signal-didChangeConfiguration (server) "Send a `:workspace/didChangeConfiguration' signal to SERVER. When called interactively, use the currently active server" @@ -2236,12 +2248,7 @@ When called interactively, use the currently active server" server :workspace/didChangeConfiguration (list :settings - (or (cl-loop for (section . v) in (eglot--workspace-configuration server) - collect (if (keywordp section) - section - (intern (format ":%s" section))) - collect v) - eglot--{})))) + (eglot--workspace-configuration-plist server)))) (cl-defmethod eglot-handle-request (server (_method (eql workspace/configuration)) &key items) -- 2.39.5