branch: externals/eglot
commit 05ff697756f28671fadc4aaa5c494934768ee0d2
Author: João Távora <[email protected]>
Commit: João Távora <[email protected]>
Document current API breaches a bit
* eglot-tests.el (eglot--call-with-dirs-and-files)
(auto-reconnect): use eglot--process
* eglot.el (eglot-shutdown, eglot, eglot-reconnect)
(eglot--connect): Use eglot--process
(eglot--process): Alias to concentrate the hack here.
(eglot--signal-textDocument/didChange): Tweak comment.
---
eglot-tests.el | 8 ++++----
eglot.el | 19 ++++++++++++-------
2 files changed, 16 insertions(+), 11 deletions(-)
diff --git a/eglot-tests.el b/eglot-tests.el
index 8afbfa5..777d2da 100644
--- a/eglot-tests.el
+++ b/eglot-tests.el
@@ -67,7 +67,7 @@
(let ((eglot-autoreconnect nil))
(mapc #'eglot-shutdown
(cl-remove-if-not
- (lambda (server) (process-live-p (jsonrpc--process server)))
+ (lambda (server) (process-live-p (eglot--process server)))
new-servers)))
(dolist (buf new-buffers) ;; have to save otherwise will get prompted
(with-current-buffer buf (save-buffer) (kill-buffer)))
@@ -145,13 +145,13 @@
;; In 1.2 seconds > `eglot-autoreconnect' kill servers. We
;; should have a automatic reconnection.
(run-with-timer 1.2 nil (lambda () (delete-process
- (jsonrpc--process server))))
- (while (process-live-p (jsonrpc--process server))
+ (eglot--process server))))
+ (while (process-live-p (eglot--process server))
(accept-process-output nil 0.5))
(should (jsonrpc-current-connection))
;; Now try again too quickly
(setq server (jsonrpc-current-connection))
- (let ((proc (jsonrpc--process server)))
+ (let ((proc (eglot--process server)))
(run-with-timer 0.5 nil (lambda () (delete-process proc)))
(while (process-live-p proc) (accept-process-output nil 0.5)))
(should (not (jsonrpc-current-connection))))))))
diff --git a/eglot.el b/eglot.el
index 1328331..ccb7b49 100644
--- a/eglot.el
+++ b/eglot.el
@@ -191,6 +191,11 @@ lasted more than that many seconds."
(defvar eglot--servers-by-project (make-hash-table :test #'equal)
"Keys are projects. Values are lists of processes.")
+;; HACK: Do something to fix this in the jsonrpc API or here, but in
+;; the meantime concentrate the hack here.
+(defalias 'eglot--process 'jsonrpc--process
+ "An abuse of `jsonrpc--process', a jsonrpc.el internal.")
+
(defun eglot-shutdown (server &optional _interactive)
"Politely ask SERVER to quit.
Forcefully quit it if it doesn't respond. Don't leave this
@@ -206,9 +211,9 @@ function with the server still running."
;; Turn off `eglot--managed-mode' where appropriate.
(dolist (buffer (eglot--managed-buffers server))
(with-current-buffer buffer (eglot--managed-mode-onoff server -1)))
- (when (process-live-p (jsonrpc--process server))
+ (when (process-live-p (eglot--process server))
(eglot--warn "Brutally deleting non-compliant server %s" (jsonrpc-name
server))
- (delete-process (jsonrpc--process server)))))
+ (delete-process (eglot--process server)))))
(defun eglot--on-shutdown (server)
"Called by jsonrpc.el when SERVER is already dead."
@@ -330,7 +335,7 @@ INTERACTIVE is t if called interactively."
(car (project-roots project)))))
(current-server (jsonrpc-current-connection))
(live-p (and current-server
- (process-live-p (jsonrpc--process current-server)))))
+ (process-live-p (eglot--process current-server)))))
(if (and live-p
interactive
(y-or-n-p "[eglot] Live process found, reconnect instead? "))
@@ -351,7 +356,7 @@ managing `%s' buffers in project `%s'."
"Reconnect to SERVER.
INTERACTIVE is t if called interactively."
(interactive (list (jsonrpc-current-connection-or-lose) t))
- (when (process-live-p (jsonrpc--process server))
+ (when (process-live-p (eglot--process server))
(eglot-shutdown server interactive))
(eglot--connect (eglot--project server)
(eglot--major-mode server)
@@ -391,7 +396,7 @@ And NICKNAME and CONTACT."
server
:initialize
(jsonrpc-obj :processId (unless (eq (process-type
- (jsonrpc--process server))
+ (eglot--process server))
'network)
(emacs-pid))
:rootPath (expand-file-name
@@ -415,7 +420,7 @@ And NICKNAME and CONTACT."
(setf (eglot--inhibit-autoreconnect server)
(null eglot-autoreconnect)))))))
(setq success server))
- (unless (or success (not (process-live-p (jsonrpc--process server)))
+ (unless (or success (not (process-live-p (eglot--process server)))
(eglot--moribund server))
(eglot-shutdown server)))))
@@ -851,7 +856,7 @@ Records START, END and PRE-CHANGE-LENGTH locally."
:text after-text)])))))
(setq eglot--recent-changes (cons [] []))
(setf (eglot--spinner server) (list nil :textDocument/didChange t))
- ;; HACK!
+ ;; HACK! perhaps jsonrpc should just call this on every send
(jsonrpc--call-deferred server))))
(defun eglot--signal-textDocument/didOpen ()