]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix Eglot progress reporting
authorJoão Távora <joaotavora@gmail.com>
Thu, 23 Mar 2023 10:25:17 +0000 (10:25 +0000)
committerJoão Távora <joaotavora@gmail.com>
Thu, 23 Mar 2023 10:26:51 +0000 (10:26 +0000)
When the server sends an "end" message, Emacs's progress reporters
should also be updated.

* lisp/progmodes/eglot.el (eglot-handle-notification $/progress): Rework.

lisp/progmodes/eglot.el

index 76f70ead666a62534478139355307c69768a9160..b4116dc4aaf8133a0b5fc4621c78776df6540dba 100644 (file)
@@ -2159,22 +2159,24 @@ COMMAND is a symbol naming the command."
   (server (_method (eql $/progress)) &key token value)
   "Handle $/progress notification identified by TOKEN from SERVER."
   (when eglot-report-progress
-    (cl-flet ((fmt (&rest args) (mapconcat #'identity args " ")))
+    (cl-flet ((fmt (&rest args) (mapconcat #'identity args " "))
+              (upd (pcnt msg &optional
+                         (pr (gethash token (eglot--progress-reporters server))))
+                (when pr (progress-reporter-update pr pcnt msg))))
       (eglot--dbind ((WorkDoneProgress) kind title percentage message) value
         (pcase kind
           ("begin"
-           (let* ((prefix (format (concat "[eglot] %s %s:" (when percentage " "))
-                                  (eglot-project-nickname server) token))
-                  (pr (puthash token
-                       (if percentage
-                           (make-progress-reporter prefix 0 100 percentage 1 0)
-                         (make-progress-reporter prefix nil nil nil 1 0))
-                       (eglot--progress-reporters server))))
-             (progress-reporter-update pr percentage (fmt title message))))
-          ("report"
-           (when-let ((pr (gethash token (eglot--progress-reporters server))))
-             (progress-reporter-update pr percentage (fmt title message))))
-          ("end" (remhash token (eglot--progress-reporters server))))))))
+           (let ((prefix (format (concat "[eglot] %s %s:" (when percentage " "))
+                                 (eglot-project-nickname server) token)))
+             (upd percentage (fmt title message)
+                  (puthash token
+                           (if percentage
+                               (make-progress-reporter prefix 0 100 percentage 1 0)
+                             (make-progress-reporter prefix nil nil nil 1 0))
+                           (eglot--progress-reporters server)))))
+          ("report" (upd percentage (fmt title message)))
+          ("end" (upd (or percentage 100) (fmt title message))
+           (remhash token (eglot--progress-reporters server))))))))
 
 (cl-defmethod eglot-handle-notification
   (_server (_method (eql textDocument/publishDiagnostics)) &key uri diagnostics