bug#81514: 32.0.50; Eglot messages progress reporter shows errors

Stéphane Marks <[email protected]> Sat, 1 Aug 2026 17:04:42 +0200
Newsgroups gmane.emacs.bugs
Message-ID <CAN+1HbrEGNj7TsKv=EsAFdUJUZ=M6vSsjc8Te5AUA8a+pvWG_w@mail.gmail.com>
On Sat, Aug 1, 2026 at 7:59 AM João Távora <[email protected]> wrote:

> Stéphane Marks <[email protected]> writes:
>
> I've pushed my simpler patch
>
>    commit cf98d9d725f034b3dd89f6f92a1c8205e778f98c
>    Author: João Távora <[email protected]>
>    Date:   Sat Aug 1 10:54:10 2026 +0100
>
>      Eglot: do more orthodox use of progress reporters (bug#81514)
>
>      The progress reporters on recent Emacs has backward incompatible
>      changes, but our use of them wasn't too correct either.

but please read on.
>
> >  The previous reporter or the fixed one?  And before or
> >  after your changes?
> > It is good the system-taskbar progress bar displays but it is bad that
> > it pulses for a known 0-100 progress reporter
>
> What do you mean by "pulsing"?  It's been a while since I've cared about
> these OSX/Windows/GUI paraphernalia.  You seem to mean "pulses when it
> should be xxxing".  What is xxx?
>

Pulsing is the terminology used in progress-reporter:

(defvar progress-reporter-update-functions (list
#'progress-reporter-echo-area)
...
- A monotonically increasing integer for a pulsing reporter.

A pulsing reporter is one that has no bounds and knows only that an
activity is under way so it "pulses" using a spinner or whatever in the
echo area and system-taskbar will show a progress bar that simply cycles
rather than indicates percentage completion.

> and very bad that the stateful system-taskbar progress bars need to
> > disappear when percent gets to 100 (or times out or whatever) but
> > don't disappear, sitting at the last remaining reported percentage.
>
> Understood.
>
>  Anyway, can you try the simpler patch after my sig?  It should create
> >  the reporter with 0-100 and also call 'progress-reporter-done' at the
> >  appropriate time (and be a bit less intrusive).
> >
> > The only issue with the simpler patch is that if the LSP server sends
> "end" without first reporting 100, any stateful
> > progress reporter back ends like system-taskbar's are never cleared.
>
> If the server sends 'end' and no percentage my patch (which btw I've just
> pushed to emacs-31) throws a 100 in there and you should get a call to
> progress-reporter-done.  What else is missing there?
>

Good.

> Same if the LSP server dies.  Are those conditions we should account
> > for?
>
> The first condition you mention I've tried to address.  As to the
> "server death", I don't think either of our patches handles it.  What is
> an appropriate cleanup function for a progress reporter, just a
> 'progress-reporter-done' or something else?
>
> diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el
> index 0f0791d37ab..285041653d1 100644
> --- a/lisp/progmodes/eglot.el
> +++ b/lisp/progmodes/eglot.el
> @@ -1491,6 +1491,11 @@ eglot--on-shutdown
>           (lambda (x) (eq server
>                           (get-text-property 0 'eglot--server (car x))))
>           flymake-list-only-diagnostics))
> +  ;; Cleanup progress reporters
> +  (maphash (lambda (_ r)
> +             (unless (eq (car r) 'eglot--mode-line-reporter )
> +               (progress-reporter-done r)))
> +           (eglot--progress-reporters server))
>    (cond ((eglot--shutdown-requested server)
>           t)
>          ((not (eglot--inhibit-autoreconnect server))
>

Yes, progress-reporter-done should do the trick.

> Did you want to address Microsoft's suggestion to ignore erroneous
> > progress values?  Clearly, they know that LSP servers misbehave and/or
> > are misimplemented.
>
> I'll protect the code if I find actual evidence of misbehavior.  Up to
> now, no such reports existed.  In fact this bug was bisected to your
> changes to the progress reporters ;-) But feel please conjecture a
> hypothetical scenario where we both can clearly tell there would be
> (serious?) misbehavior.
>
> > For the sake of documentation posterity, I'll include the official LSP
> > documentation reference here.
> >
> >
> https://github.com/microsoft/language-server-protocol/blob/b7f5132c95261c0898ae5124e7a91707abc48fcd/_specifications/specification-3-16.md?plain=1#L1455
> >
> >     The value range is [0, 100]. The value should be steadily
> > rising. Clients are free to ignore values that are not following this
> > rule.
>
> Why do you keep highlighting that clients are free to ignore this
> monotony.  Is it of particular relevance to this bug or proposed patch?
>

I've mentioned it twice if that counts as "keep highlighting" merely to see
if this is worth defending against and clearly you think not yet, so I
won't highlight this again.

>  Finally, can you spare a sentence or two about what the new progress
> >  reporter enables?  Alternatively, point me a relevant NEWS entry?
> >
> > See
> >
> https://github.com/emacs-mirror/emacs/blob/99a9307235ca7e833744adb19e58473b86fc76e8/etc/NEWS#L4089
>
> Thanks.
>
> João
>