Subject: bug#61764: closed (Re: control message for bug #61764)

From: [email-masked] (GNU bug Tracking System)
Date: Tue, 05 Sep 2023 23:28:02 +0000

Your bug report

#61764: 29.0.60; eglot show incomplete inlay hints

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
61764: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=61764
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: control message for bug #61764
From: Stefan Kangas <[email-masked]>
To: Kai Ma <[email-masked]>
Cc: [email-masked]
Date: Tue, 5 Sep 2023 16:27:36 -0700
List-Id: <debbugs-submit.debbugs.gnu.org>

Kai Ma <[email-masked]> writes:

> fixed 61764 29.1
> quit

I assume that means you can no longer see the issue, so I'm closing this
bug.

Subject: 29.0.60; eglot show incomplete inlay hints
From: Kai Ma <[email-masked]>
To: [email-masked]
Date: Sat, 25 Feb 2023 01:10:19 +0800
List-Id: <debbugs-submit.debbugs.gnu.org>

The display of some inlay hints are not complete.  For example, in a
Rust source file:

  let v = vec![1i32];

The expected display is:

  let v: Vec<i32> = ...;

However, the current eglot (commit 55d29c9bacb in branch emacs-29) only
shows the semicolon:

  let v: = ...;

I found that the inlay hint returned by rust-analyzer is something like:

  ([(:value ": ") (:value "Vec" :location ...) (:value "<i32>")])

And I can confirm that by making the following change, the inlay hints
from rust-analyzer will be displayed correctly.

--- a/lisp/progmodes/eglot.el
+++ b/lisp/progmodes/eglot.el
@@ -3549,7 +3549,7 @@ eglot--update-hints-1
                   (left-pad (and paddingLeft (not (memq (char-before) '(32 9)))))
                   (right-pad (and paddingRight (not (memq (char-after) '(32 9)))))
                   (text (if (stringp label)
-                            label (plist-get (elt label 0) :value))))
+                            label (mapconcat (lambda (plist) (plist-get plist :value)) label))))
               (overlay-put ov 'before-string
                            (propertize
                             (concat (and left-pad " ") text (and right-pad " "))

According to the LSP spec [1], the intention of this design is to
support the use case where a LSP client shows different information for
each part.  Therefore, I believe this (concatenation) is the correct
thing to do, regardless of whether eglot supports hovering.

[1] https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#inlayHint

Kai