diff options
| author | João Távora <joaotavora@gmail.com> | 2026-01-14 09:37:06 +0000 |
|---|---|---|
| committer | João Távora <joaotavora@gmail.com> | 2026-01-21 12:26:24 +0000 |
| commit | ff5bab955288d2cacb77eecbbc0ea65de50dbdbb (patch) | |
| tree | 471694f951870b250def7555971210792ca953b5 | |
| parent | 81b7e8e927dc2739aba3cd3f6a0592bf8de9685e (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.el | 31 |
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. |
