summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoão Távora <joaotavora@gmail.com>2026-01-14 09:37:06 +0000
committerJoão Távora <joaotavora@gmail.com>2026-01-21 12:26:24 +0000
commitff5bab955288d2cacb77eecbbc0ea65de50dbdbb (patch)
tree471694f951870b250def7555971210792ca953b5
parent81b7e8e927dc2739aba3cd3f6a0592bf8de9685e (diff)
Eglot: advertise cancellation on eglot--request quits
* lisp/progmodes/eglot.el (eglot--request): Pass CANCEL-ON-QUIT to jsonrpc-request.
-rw-r--r--lisp/progmodes/eglot.el31
1 files changed, 16 insertions, 15 deletions
diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el
index 6137c292534..ce32e542b8f 100644
--- a/lisp/progmodes/eglot.el
+++ b/lisp/progmodes/eglot.el
@@ -1959,21 +1959,22 @@ in project `%s'."
"Like `jsonrpc-request', but for Eglot LSP requests.
Unless IMMEDIATE, send pending changes before making request."
(unless immediate (eglot--signal-textDocument/didChange))
- (condition-case oops
- (jsonrpc-request
- server method params
- :timeout timeout
- :cancel-on-input
- (cond ((and cancel-on-input
- eglot-advertise-cancellation)
- (lambda (id)
- (jsonrpc-notify server '$/cancelRequest `(:id ,id))))
- (cancel-on-input))
- :cancel-on-input-retval cancel-on-input-retval)
- (jsonrpc-error
- (let* ((data (cddr oops)) (code (alist-get 'jsonrpc-error-code data)))
- (if (zerop code) (eglot--message (alist-get 'jsonrpc-error-message data))
- (signal 'jsonrpc-error (cdr oops)))))))
+ (cl-flet ((cancel (id)
+ (jsonrpc-notify server '$/cancelRequest `(:id ,id))))
+ (condition-case oops
+ (jsonrpc-request server method params
+ :timeout timeout
+ :cancel-on-input
+ (if (and cancel-on-input eglot-advertise-cancellation)
+ #'cancel
+ cancel-on-input)
+ :cancel-on-quit
+ (and eglot-advertise-cancellation #'cancel)
+ :cancel-on-input-retval cancel-on-input-retval)
+ (jsonrpc-error
+ (let* ((data (cddr oops)) (ec (alist-get 'jsonrpc-error-code data)))
+ (if (zerop ec) (eglot--message (alist-get 'jsonrpc-error-message data))
+ (signal 'jsonrpc-error (cdr oops))))))))
(defvar-local eglot--inflight-async-requests nil
"An plist of symbols to lists of JSONRPC ids.