GNU bug report logs - #64101
29.0.91; Eglot inlay hints rendered out of order

Previous Next

Package: emacs;

Reported by: Krzysztof Klimonda <kklimonda <at> syntaxhighlighted.com>

Date: Fri, 16 Jun 2023 05:57:04 UTC

Severity: normal

Found in version 29.0.91

Full log


View this message in rfc822 format

From: Milan Jovanovic <milanj <at> gmail.com>
To: João Távora <joaotavora <at> gmail.com>
Cc: Eli Zaretskii <eliz <at> gnu.org>, Krzysztof Klimonda <kklimonda <at> syntaxhighlighted.com>, Stefan Monnier <monnier <at> iro.umontreal.ca>, 64101 <at> debbugs.gnu.org
Subject: bug#64101: 29.0.91; Eglot inlay hints rendered out of order
Date: Mon, 19 Jun 2023 20:06:47 +0200

> On 19. 6. 2023., at 18:34, João Távora <joaotavora <at> gmail.com> wrote:
> 
> On Mon, Jun 19, 2023 at 5:17 PM Milan Jovanovic <milanj <at> gmail.com> wrote:
>> 
>> João,  is there a reason why (in Eglot) hint parts can’t be merged and only one overlay created ?
> 
> Yes, in general you want to keep different properties of different
> labels, such as URL links isolated.
Not sure that I understand, I was talking about merging “values” of one “label”, I don’t see that inlay hints code is using any other property from response (other than :value)

>> I fix it to create one overlay and I haven’t noticed any issues (I use it only with the rust-analyzer though).
>> Don’t know if this is stupid question,  don’t know much about LSP protocol (or Emacs internals).
> 
> It's not a stupid question at all, and it's a possibility, but
> I have to understand the problem first, and if you haven't
> yet understood that, I don't have a Mac OS machine to test.
> 
> Before trying fixes, or at least while you're trying them,
> please I urge you to provide a reproduction recipe for whatever
> you're trying to do.  Your last follow-up bug report is completely strange
> to me: in the situation you last described there aren't any
> multiple coinciding overlays like in the original report of Krzysztof.
> 
> João

So, you fix did solve original Krzysztof report (and my original report) for more complex type hints but now I have the same issue with argument hints.

Example:

fn main () {
   let mut c = vec![1,2,3];
   c.insert(0, 0);
}


Inlay type hint of “c” is ok but argument hints for insert() are presented in wrong order:

Instead of    "c.insert(‘index:’ 0, ‘element: ‘ 0)"
i’m getting   "c.insert(‘: index’0, ‘: element’0)”

Trace for this part:

1 -> (make-overlay 384 385 nil nil nil)
1 <- make-overlay: #<overlay from 384 to 385 in main.rs>
======================================================================
1 -> (overlay-put #<overlay from 384 to 385 in main.rs> after-string #("index" 0 5 (face eglot-parameter-hint-face)))
1 <- overlay-put: #("index" 0 5 (face eglot-parameter-hint-face))
======================================================================
1 -> (overlay-put #<overlay from 384 to 385 in main.rs> priority 0)
1 <- overlay-put: 0
======================================================================
1 -> (overlay-put #<overlay from 384 to 385 in main.rs> eglot--inlay-hint t)
1 <- overlay-put: t
======================================================================
1 -> (overlay-put #<overlay from 384 to 385 in main.rs> evaporate t)
1 <- overlay-put: t
======================================================================
1 -> (overlay-put #<overlay from 384 to 385 in main.rs> eglot--overlay t)
1 <- overlay-put: t
======================================================================
1 -> (make-overlay 384 385 nil nil nil)
1 <- make-overlay: #<overlay from 384 to 385 in main.rs>
======================================================================
1 -> (overlay-put #<overlay from 384 to 385 in main.rs> after-string #(": " 0 2 (face eglot-parameter-hint-face)))
1 <- overlay-put: #(": " 0 2 (face eglot-parameter-hint-face))
======================================================================
1 -> (overlay-put #<overlay from 384 to 385 in main.rs> priority 1)
1 <- overlay-put: 1
======================================================================
1 -> (overlay-put #<overlay from 384 to 385 in main.rs> eglot--inlay-hint t)
1 <- overlay-put: t
======================================================================
1 -> (overlay-put #<overlay from 384 to 385 in main.rs> evaporate t)
1 <- overlay-put: t
======================================================================
1 -> (overlay-put #<overlay from 384 to 385 in main.rs> eglot--overlay t)
1 <- overlay-put: t
======================================================================
1 -> (make-overlay 387 388 nil nil nil)
1 <- make-overlay: #<overlay from 387 to 388 in main.rs>
======================================================================
1 -> (overlay-put #<overlay from 387 to 388 in main.rs> after-string #("element" 0 7 (face eglot-parameter-hint-face)))
1 <- overlay-put: #("element" 0 7 (face eglot-parameter-hint-face))
======================================================================
1 -> (overlay-put #<overlay from 387 to 388 in main.rs> priority 0)
1 <- overlay-put: 0
======================================================================
1 -> (overlay-put #<overlay from 387 to 388 in main.rs> eglot--inlay-hint t)
1 <- overlay-put: t
======================================================================
1 -> (overlay-put #<overlay from 387 to 388 in main.rs> evaporate t)
1 <- overlay-put: t
======================================================================
1 -> (overlay-put #<overlay from 387 to 388 in main.rs> eglot--overlay t)
1 <- overlay-put: t
======================================================================
1 -> (make-overlay 387 388 nil nil nil)
1 <- make-overlay: #<overlay from 387 to 388 in main.rs>
======================================================================
1 -> (overlay-put #<overlay from 387 to 388 in main.rs> after-string #(": " 0 2 (face eglot-parameter-hint-face)))
1 <- overlay-put: #(": " 0 2 (face eglot-parameter-hint-face))
======================================================================
1 -> (overlay-put #<overlay from 387 to 388 in main.rs> priority 1)
1 <- overlay-put: 1
======================================================================
1 -> (overlay-put #<overlay from 387 to 388 in main.rs> eglot--inlay-hint t)
1 <- overlay-put: t
======================================================================
1 -> (overlay-put #<overlay from 387 to 388 in main.rs> evaporate t)
1 <- overlay-put: t
======================================================================
1 -> (overlay-put #<overlay from 387 to 388 in main.rs> eglot--overlay t)
1 <- overlay-put: t
======================================================================
1 -> (make-overlay 517 518 nil t)
1 <- make-overlay: #<overlay from 517 to 518 in main.rs>
======================================================================
1 -> (overlay-put #<overlay from 517 to 518 in main.rs> before-string #(": " 0 1 (face eglot-type-hint-face cursor 1) 1 2 (face eglot-type-hint-face)))
1 <- overlay-put: #(": " 0 1 (face eglot-type-hint-face cursor 1) 1 2 (face eglot-type-hint-face))
======================================================================
1 -> (overlay-put #<overlay from 517 to 518 in main.rs> priority 0)
1 <- overlay-put: 0
======================================================================
1 -> (overlay-put #<overlay from 517 to 518 in main.rs> eglot--inlay-hint t)
1 <- overlay-put: t
======================================================================
1 -> (overlay-put #<overlay from 517 to 518 in main.rs> evaporate t)
1 <- overlay-put: t
======================================================================
1 -> (overlay-put #<overlay from 517 to 518 in main.rs> eglot--overlay t)
1 <- overlay-put: t






This bug report was last modified 2 years and 60 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.