Skip to content

Commit

Permalink
Close joaotavora/eglot#29: Implement workspace/didChangeConfiguration…
Browse files Browse the repository at this point in the history
… (#40)

* README.md (Supported Protocol Features, Commands and
keybindings): mention workspace/didChangeConfiguration.

* eglot.el (eglot-server-initialized-hook): New hook.
(eglot--connect): Run it.
(eglot-workspace-configuration): New variable.
(eglot-signal-didChangeConfiguration): New command.
  • Loading branch information
joaotavora authored Jul 11, 2018
1 parent ceba62a commit e3db162
Showing 1 changed file with 22 additions and 0 deletions.
22 changes: 22 additions & 0 deletions lisp/progmodes/eglot.el
Original file line number Diff line number Diff line change
Expand Up @@ -446,6 +446,11 @@ INTERACTIVE is t if called interactively."

(defvar eglot-connect-hook nil "Hook run after connecting in `eglot--connect'.")

(defvar eglot-server-initialized-hook
'(eglot-signal-didChangeConfiguration)
"Hook run after server is successfully initialized.
Each function is passed the server as an argument")

(defun eglot--connect (managed-major-mode project class contact)
"Connect to MANAGED-MAJOR-MODE, PROJECT, CLASS and CONTACT.
This docstring appeases checkdoc, that's all."
Expand Down Expand Up @@ -514,6 +519,7 @@ This docstring appeases checkdoc, that's all."
(with-current-buffer buffer
(eglot--maybe-activate-editing-mode server)))
(jsonrpc-notify server :initialized `(:__dummy__ t))
(run-hook-with-args 'eglot-server-initialized-hook server)
(setf (eglot--inhibit-autoreconnect server)
(cond
((booleanp eglot-autoreconnect) (not eglot-autoreconnect))
Expand Down Expand Up @@ -1033,6 +1039,22 @@ Records START, END and PRE-CHANGE-LENGTH locally."
(eglot--signal-textDocument/didChange))))
'((name . eglot--signal-textDocument/didChange)))

(defvar-local eglot-workspace-configuration ()
"Alist of (SETTING . VALUE) entries configuring the LSP server.
Setting should be a keyword, value can be any value that can be
converted to JSON.")

(defun eglot-signal-didChangeConfiguration (server)
"Send a `:workspace/didChangeConfiguration' signal to SERVER.
When called interactively, use the currently active server"
(interactive (list (eglot--current-server-or-lose)))
(jsonrpc-notify
server :workspace/didChangeConfiguration
(list
:settings
(cl-loop for (k . v) in eglot-workspace-configuration
collect k collect v))))

(defun eglot--signal-textDocument/didChange ()
"Send textDocument/didChange to server."
(when eglot--recent-changes
Expand Down

0 comments on commit e3db162

Please sign in to comment.