[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/eglot 889ef20 085/139: Tweak the async request engine.
From: |
João Távora |
Subject: |
[elpa] externals/eglot 889ef20 085/139: Tweak the async request engine. |
Date: |
Mon, 14 May 2018 09:54:59 -0400 (EDT) |
branch: externals/eglot
commit 889ef20069d7d6511ce7f8f5b13928f3e7100eb5
Author: João Távora <address@hidden>
Commit: João Távora <address@hidden>
Tweak the async request engine.
* eglot.el (eglot--request): Return the continuation id.
(eglot--lambda): Move up in the file.
(eglot--sync-request): Use a catch-tag.
---
eglot.el | 44 ++++++++++++++++++++++++++------------------
1 file changed, 26 insertions(+), 18 deletions(-)
diff --git a/eglot.el b/eglot.el
index 068e2ca..3bed8d9 100644
--- a/eglot.el
+++ b/eglot.el
@@ -593,7 +593,9 @@ is a symbol saying if this is a client or server
originated."
method
params
&key success-fn error-fn timeout-fn (async-p t))
- "Make a request to PROCESS, expecting a reply."
+ "Make a request to PROCESS, expecting a reply.
+Return the ID of this request, unless ASYNC-P is nil, in which
+case never returns locally."
(let* ((id (eglot--next-request-id))
(timeout-fn
(or timeout-fn
@@ -658,22 +660,34 @@ is a symbol saying if this is a client or server
originated."
(when (memq timeout-timer timer-list)
(eglot--message
"(request) Last-change cancelling timer for continuation %s" id)
- (cancel-timer timeout-timer))))))))
+ (cancel-timer timeout-timer))))))
+ ;; Finally, return the id.
+ id))
+
+(cl-defmacro eglot--lambda (cl-lambda-list &body body)
+ (declare (indent 1) (debug (sexp &rest form)))
+ `(cl-function
+ (lambda ,cl-lambda-list
+ ,@body)))
(defun eglot--sync-request (proc method params)
"Like `eglot--request' for PROC, METHOD and PARAMS, but synchronous.
Meaning only return locally if successful, otherwise exit non-locally."
(let* ((timeout-error-sym (cl-gensym))
- (retval (eglot--request proc method params
- :success-fn (lambda (&rest args)
- (if (vectorp (car args))
- (car args)
- args))
- :error-fn (cl-function
- (lambda (&key code message
&allow-other-keys)
- (eglot--error "Oops: %s: %s"
code message)))
- :timeout-fn (lambda () timeout-error-sym)
- :async-p nil)))
+ (catch-tag (make-symbol "eglot--sync-request-catch-tag"))
+ (retval
+ (catch catch-tag
+ (eglot--request proc method params
+ :success-fn (lambda (&rest args)
+ (throw catch-tag (if (vectorp (car
args))
+ (car args)
+ args)))
+ :error-fn (eglot--lambda
+ (&key code message &allow-other-keys)
+ (eglot--error "Oops: %s: %s" code
message))
+ :timeout-fn (lambda ()
+ (throw catch-tag timeout-error-sym))
+ :async-p nil))))
;; FIXME: There's maybe an emacs bug here. Because timeout-fn runs
;; in a timer, the better and obvious choice of throwing the erro
;; in the lambda is not quitting the `accept-process-output'
@@ -741,12 +755,6 @@ Meaning only return locally if successful, otherwise exit
non-locally."
"Apply FUN to every element of SEQ."
(mapcar (lambda (e) (apply fun e)) seq))
-(cl-defmacro eglot--lambda (cl-lambda-list &body body)
- (declare (indent 1) (debug (sexp &rest form)))
- `(cl-function
- (lambda ,cl-lambda-list
- ,@body)))
-
(defun eglot--path-to-uri (path)
"Urify PATH."
(url-hexify-string
- [elpa] externals/eglot 95187cf 058/139: Connect to LSP server via TCP, (continued)
- [elpa] externals/eglot 95187cf 058/139: Connect to LSP server via TCP, João Távora, 2018/05/14
- [elpa] externals/eglot f76f04e 057/139: More correctly keep track of didOpen/didClose per buffer, João Távora, 2018/05/14
- [elpa] externals/eglot 46bb1c0 049/139: Reorganize file, João Távora, 2018/05/14
- [elpa] externals/eglot ff5a03d 074/139: Very basic xref support, João Távora, 2018/05/14
- [elpa] externals/eglot e9b5e54 077/139: ETOOMANYLAMBDAS, João Távora, 2018/05/14
- [elpa] externals/eglot dda11dd 095/139: Try to fix some textDocument/completion bugs, João Távora, 2018/05/14
- [elpa] externals/eglot ea918ab 066/139: Include source info in diagnostics, João Távora, 2018/05/14
- [elpa] externals/eglot a199c8e 070/139: Honour textDocumentSync, João Távora, 2018/05/14
- [elpa] externals/eglot e86f9b4 073/139: New helper eglot--sync-request, João Távora, 2018/05/14
- [elpa] externals/eglot 1add335 078/139: Workaround two suspected Emacs bugs, João Távora, 2018/05/14
- [elpa] externals/eglot 889ef20 085/139: Tweak the async request engine.,
João Távora <=
- [elpa] externals/eglot 193c57d 075/139: Half-decent xref support, João Távora, 2018/05/14
- [elpa] externals/eglot fc6879f 084/139: Explain why didOpen on after-revert-hook is a bad idea, João Távora, 2018/05/14
- [elpa] externals/eglot 24466a9 096/139: When killing server, always wait 3 seconds, João Távora, 2018/05/14
- [elpa] externals/eglot fceb6bb 090/139: Get rid of eglot--special-buffer-process, João Távora, 2018/05/14
- [elpa] externals/eglot d254f97 082/139: Solve another textDocument/didChange bug, João Távora, 2018/05/14
- [elpa] externals/eglot f257d63 089/139: * eglot.el: Reformat to shave off some lines., João Távora, 2018/05/14
- [elpa] externals/eglot c7bd095 118/139: Improve eglot-eldoc-function, João Távora, 2018/05/14
- [elpa] externals/eglot 3e0f1c3 122/139: Misc little adjustments for readability, João Távora, 2018/05/14
- [elpa] externals/eglot 3dcbc30 109/139: Add minimal headers, commentary and autoloads, João Távora, 2018/05/14
- [elpa] externals/eglot 71e47d2 102/139: Fix odd bugs and tweak stuff, João Távora, 2018/05/14