branch: externals/eglot commit cc183a6c62567bf7fb6303e133455ad9c8da7479 Author: João Távora <joaotav...@gmail.com> Commit: João Távora <joaotav...@gmail.com>
Fix assorted bugs * eglot.el (eglot--special-buffer-process): Must be buffer-local. (eglot--define-process-var): Fix disaster waiting to happen. (eglot--process-receive): Explicitly pass PROC to eglot--pending-continuations. (eglot--textDocument/publishDiagnostics): Clear unreported diagnostics --- eglot.el | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/eglot.el b/eglot.el index f4ac858..5c014f3 100644 --- a/eglot.el +++ b/eglot.el @@ -48,7 +48,7 @@ (defvar eglot-editing-mode) ; forward decl (defvar eglot-mode) ; forward decl -(defvar eglot--special-buffer-process nil +(defvar-local eglot--special-buffer-process nil "Current buffer's eglot process.") (defun eglot--current-process () @@ -78,13 +78,14 @@ after setting it." (declare (indent 2)) `(progn (put ',var-sym 'function-documentation ,doc) - (defun ,var-sym (&optional process) - (let* ((proc (or process (eglot--current-process-or-lose))) - (probe (process-get proc ',var-sym))) - (or probe - (let ((def ,initval)) - (process-put proc ',var-sym def) - def)))) + (defun ,var-sym (proc) + (let* ((plist (process-plist proc)) + (probe (plist-member plist ',var-sym))) + (if probe + (cadr probe) + (let ((def ,initval)) + (process-put proc ',var-sym def) + def)))) (gv-define-setter ,var-sym (to-store &optional process) (let* ((prop ',var-sym)) ,(let ((form '(let ((proc (or ,process (eglot--current-process-or-lose)))) @@ -417,7 +418,8 @@ identifier. ERROR is non-nil if this is an error." (let* ((response-id (plist-get message :id)) (err (plist-get message :error)) (continuations (and response-id - (gethash response-id (eglot--pending-continuations))))) + (gethash response-id + (eglot--pending-continuations proc))))) (eglot--log-event proc (cond ((not response-id) 'server-notification) @@ -436,7 +438,7 @@ identifier. ERROR is non-nil if this is an error." (continuations (cancel-timer (cl-third continuations)) (remhash response-id - (eglot--pending-continuations)) + (eglot--pending-continuations proc)) (cond (err (apply (cl-second continuations) err)) (t @@ -655,11 +657,12 @@ running. INTERACTIVE is t if called interactively." message)))) into diags finally - (if eglot--current-flymake-report-fn - (funcall eglot--current-flymake-report-fn - diags) - (setq eglot--unreported-diagnostics - diags)))))) + (if (null eglot--current-flymake-report-fn) + (setq eglot--unreported-diagnostics + diags) + (funcall eglot--current-flymake-report-fn + diags) + (setq eglot--unreported-diagnostics nil)))))) (t (eglot--message "OK so %s isn't visited" filename)))))