[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/elpa e86f9b4 073/139: New helper eglot--sync-request
From: |
João Távora |
Subject: |
[elpa] externals/elpa e86f9b4 073/139: New helper eglot--sync-request |
Date: |
Mon, 14 May 2018 09:53:39 -0400 (EDT) |
branch: externals/elpa
commit e86f9b41beab44bfa3ab7c75882baa7eb80be46b
Author: João Távora <address@hidden>
Commit: João Távora <address@hidden>
New helper eglot--sync-request
This should help with xref definitions
* eglot.el (eglot--request): Rework a bit. Continuation is always
cleared on timeout, regardless of user-supplied fn.
(eglot--sync-request): New function.
(eglot--process-receive): watch out for vector results.
---
eglot.el | 39 +++++++++++++++++++++++++++++++--------
1 file changed, 31 insertions(+), 8 deletions(-)
diff --git a/eglot.el b/eglot.el
index 2afb0e7..34ce0f8 100644
--- a/eglot.el
+++ b/eglot.el
@@ -546,7 +546,10 @@ identifier. ERROR is non-nil if this is a JSON-RPC error."
(remhash id (eglot--pending-continuations proc))
(if err
(apply (cl-second continuations) err)
- (apply (cl-first continuations) (plist-get message :result))))
+ (let ((res (plist-get message :result)))
+ (if (listp res)
+ (apply (cl-first continuations) res)
+ (funcall (cl-first continuations) res)))))
(id
(eglot--warn "Ooops no continuation for id %s" id)))))
@@ -592,8 +595,7 @@ identifier. ERROR is non-nil if this is a JSON-RPC error."
(or timeout-fn
(lambda ()
(eglot--warn
- "(request) Tired of waiting for reply to %s" id)
- (remhash id (eglot--pending-continuations process)))))
+ "(request) Tired of waiting for reply to %s" id))))
(error-fn
(or error-fn
(cl-function
@@ -618,11 +620,15 @@ identifier. ERROR is non-nil if this is a JSON-RPC
error."
:params params))
(catch catch-tag
(let ((timeout-timer
- (run-with-timer 5 nil
- (if async-p
- timeout-fn
- (lambda ()
- (throw catch-tag (funcall timeout-fn)))))))
+ (run-with-timer
+ 5 nil
+ (if async-p
+ (lambda ()
+ (remhash id (eglot--pending-continuations process))
+ (funcall timeout-fn))
+ (lambda ()
+ (remhash id (eglot--pending-continuations process))
+ (throw catch-tag (funcall timeout-fn)))))))
(puthash id
(list (if async-p
success-fn
@@ -651,6 +657,23 @@ identifier. ERROR is non-nil if this is a JSON-RPC error."
"(request) Last-change cancelling timer for continuation %s" id)
(cancel-timer timeout-timer))))))))
+(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."
+ (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 ()
+ (lambda ()
+ (eglot--error
+ "Tired of waiting for reply to sync
request")))
+ :async-p nil))
+
(cl-defun eglot--notify (process method params)
"Notify PROCESS of something, don't expect a reply.e"
(eglot--process-send nil
- [elpa] externals/elpa 0e95167 042/139: Watch for files opened under umbrella of existing process, (continued)
- [elpa] externals/elpa 0e95167 042/139: Watch for files opened under umbrella of existing process, João Távora, 2018/05/14
- [elpa] externals/elpa 9665a3e 051/139: Fix textDocument/didChange, João Távora, 2018/05/14
- [elpa] externals/elpa 1514e0f 052/139: Fix a couple of Rust-related edge cases, João Távora, 2018/05/14
- [elpa] externals/elpa d90efdf 001/139: Initial commit, João Távora, 2018/05/14
- [elpa] externals/elpa 29d4103 056/139: Fix mode-line mouse-clicks from outside selected window, João Távora, 2018/05/14
- [elpa] externals/elpa ea918ab 066/139: Include source info in diagnostics, João Távora, 2018/05/14
- [elpa] externals/elpa 2b61a3b 048/139: Delete two useless forward declarations, João Távora, 2018/05/14
- [elpa] externals/elpa 7d0bf64 062/139: Workaround RLS's regusal to treat nil as empty json object, João Távora, 2018/05/14
- [elpa] externals/elpa e7ffc31 067/139: Make reported capabilities into its own function, João Távora, 2018/05/14
- [elpa] externals/elpa c2862f4 063/139: Don't auto-reconnect if last attempt lasted less than 3 seconds, João Távora, 2018/05/14
- [elpa] externals/elpa e86f9b4 073/139: New helper eglot--sync-request,
João Távora <=
- [elpa] externals/elpa 95187cf 058/139: Connect to LSP server via TCP, João Távora, 2018/05/14
- [elpa] externals/elpa f8bfb7e 064/139: Handle requests from server correctly, João Távora, 2018/05/14
- [elpa] externals/elpa 8160cd4 071/139: Handle dynamic registration in general (but nothing specific yet), João Távora, 2018/05/14
- [elpa] externals/elpa 9ff97a6 079/139: Increase request timeout length to 10 seconds, João Távora, 2018/05/14
- [elpa] externals/elpa 193c57d 075/139: Half-decent xref support, João Távora, 2018/05/14
- [elpa] externals/elpa d254f97 082/139: Solve another textDocument/didChange bug, João Távora, 2018/05/14
- [elpa] externals/elpa a7ddce6 080/139: Support javascript's javascript-typescript-langserver, João Távora, 2018/05/14
- [elpa] externals/elpa af14364 093/139: Only request stuff that server says it's capable of, João Távora, 2018/05/14
- [elpa] externals/elpa d33a9b5 103/139: Simplify eglot--signal-textDocument/didChange, João Távora, 2018/05/14
- [elpa] externals/elpa 56c2e1d 104/139: Get rid of eglot-mode, João Távora, 2018/05/14