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
Message #83 received at 64101 <at> debbugs.gnu.org (full text, mbox):
From: João Távora <joaotavora <at> gmail.com> To: Milan Jovanovic <milanj <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: Re: bug#64101: 29.0.91; Eglot inlay hints rendered out of order Date: Mon, 19 Jun 2023 20:08:05 +0100
On Mon, Jun 19, 2023 at 7:06 PM Milan Jovanovic <milanj <at> gmail.com> wrote:
> 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.
Yes, and I've already replied to you that I can't reproduce
your error. So maybe you should follow the instructions
of
https://joaotavora.github.io/eglot/#Troubleshooting-Eglot
so that you can provide a bullet-proof reproduction recipe.
So far, you haven't done that. You just send me snippets of
Rust code and I assume I should paste them into my own
Emacs. And there, I can't reproduce the problem.
IOW, I don't doubt that there's a problem in Eglot, but I
need you to patiently craft a mail with the full recipe, i.e.
the fullest -- and simplest -- account possible of your
problem.
> Example:
>
> fn main () {
> let mut c = vec![1,2,3];
> c.insert(0, 0);
> }
>
Here, again, I see the correct inlay hints.
Here's my recipe.
$ cd /tmp
$ cargo new bla
$ cd bla
$ rust-analyzer --version
rust-analyzer 1 (cd3bf9fe51 2023-06-18)
$ emacs --version
~/Source/Emacs/emacs/src/emacs --version
GNU Emacs 30.0.50
Development version 075e77ac4493 on master branch; build date 2023-06-19.
...
<actually I have eglot.el patched with the latest patch>
$ emacs -Q -f package-initialize src/main.rs -f eglot
Now I wait a little bit for the connection to stabilize and then type in your
main.rs content. If the inlay hints don't immediately appear, just add and
delete a character anywhere in the buffer. When they do appear, they appear
correctly.
My rust-mode.el is version 1.0.5, but I've tried successfully with rust-ts-mode
as well.
And by the way, this is the trace of the make-overlay and overlay-put
functions
======================================================================
1 -> (make-overlay 53 54 nil nil nil)
1 <- make-overlay: #<overlay from 53 to 54 in main.rs>
======================================================================
1 -> (overlay-put #<overlay from 53 to 54 in main.rs> after-string
#("index: " 0 7 (face eglot-parameter-hint-face)))
1 <- overlay-put: #("index: " 0 7 (face eglot-parameter-hint-face))
======================================================================
1 -> (overlay-put #<overlay from 53 to 54 in main.rs> priority 0)
1 <- overlay-put: 0
======================================================================
1 -> (overlay-put #<overlay from 53 to 54 in main.rs> eglot--inlay-hint t)
1 <- overlay-put: t
======================================================================
1 -> (overlay-put #<overlay from 53 to 54 in main.rs> evaporate t)
1 <- overlay-put: t
======================================================================
1 -> (overlay-put #<overlay from 53 to 54 in main.rs> eglot--overlay t)
1 <- overlay-put: t
======================================================================
1 -> (make-overlay 56 57 nil nil nil)
1 <- make-overlay: #<overlay from 56 to 57 in main.rs>
======================================================================
1 -> (overlay-put #<overlay from 56 to 57 in main.rs> after-string
#("element: " 0 9 (face eglot-parameter-hint-face)))
1 <- overlay-put: #("element: " 0 9 (face eglot-parameter-hint-face))
======================================================================
1 -> (overlay-put #<overlay from 56 to 57 in main.rs> priority 0)
1 <- overlay-put: 0
======================================================================
1 -> (overlay-put #<overlay from 56 to 57 in main.rs> eglot--inlay-hint t)
1 <- overlay-put: t
======================================================================
1 -> (overlay-put #<overlay from 56 to 57 in main.rs> evaporate t)
1 <- overlay-put: t
======================================================================
1 -> (overlay-put #<overlay from 56 to 57 in main.rs> eglot--overlay t)
1 <- overlay-put: t
So, as you can see, the server isn't supplying different hints for
"index" and ":". So I can't reproduce your error, you must be
using a different version of rust analyzer or something like that.
This is the relevant portion of my Eglot events buffer:
(:jsonrpc "2.0" :id 39 :result
[(:position (:line 1 :character 12) :label
[(:value ": ")
(:value "Vec" :location
(:uri
"file:///usr/lib/rustlib/src/rust/library/alloc/src/vec/mod.rs"
:range
(:start (:line 395 :character 11) :end
(:line 395 :character 14))))
(:value "<i32>")]
:kind 1 :textEdits
[(:range
(:start (:line 1 :character 12) :end
(:line 1 :character 12))
:newText ": Vec<i32>")]
:paddingLeft :json-false :paddingRight
:json-false)
(:position (:line 2 :character 12) :label
[(:value "index:" :location
(:uri
"file:///usr/lib/rustlib/src/rust/library/alloc/src/vec/mod.rs"
:range
(:start (:line 1434 :character 29)
:end
(:line 1434 :character 34))))]
:kind 2 :paddingLeft :json-false :paddingRight t)
(:position (:line 2 :character 15) :label
[(:value "element:" :location
(:uri
"file:///usr/lib/rustlib/src/rust/library/alloc/src/vec/mod.rs"
:range
(:start (:line 1434 :character 43)
:end
(:line 1434 :character 50))))]
:kind 2 :paddingLeft :json-false :paddingRight t)])
João
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.