Subject: bug#74914: 30.0.90; Eglot: Incorrect parameter highlighted in signatureHelp

From: João Távora <[email-masked]>
Date: Sat, 28 Dec 2024 13:28:12 +0000

This looks like it's good, but i'd have to double check in 2025 (away from
my machine until then) unless Felician is confident and signs off on it.

João

On Sat, Dec 28, 2024, 11:33 Eli Zaretskii <[email-masked]> wrote:

> > Cc: Felician Nemeth <[email-masked]>,
> >  João Távora <[email-masked]>
> > From: Troy Brown <[email-masked]>
> > Date: Mon, 16 Dec 2024 10:19:14 -0500
> >
> > I'm working with a language server that provides an `activeParameter`
> > field both in SignatureHelp (set to 0) as well as in
> > SignatureInformation (set to 1).  Under this condition, for the
> > signature output in the echo area, Eglot always displays the first
> > parameter (i.e., index 0).  According to the LSP specification, when
> > an `activeParameter` field is specified in SignatureInformation "this
> > is used in place of `SignatureHelp.activeParameter`".  The following
> > is a partial log covering this transaction:
> >
> > [jsonrpc] e[09:50:52.423] --> textDocument/signatureHelp[97]
> >
> {"jsonrpc":"2.0","id":97,"method":"textDocument/signatureHelp","params":{"textDocument":{"uri":"file:///home/troy/junk/gtkada_24.0.0_80c56171/src/glib.adb"},"position":{"line":102,"character":38}}}
> > [jsonrpc] e[09:50:52.444] <-- textDocument/publishDiagnostics
> >
> {"jsonrpc":"2.0","method":"textDocument/publishDiagnostics","params":{"uri":"file:///home/troy/junk/gtkada_24.0.0_80c56171/src/glib.adb","diagnostics":[{"range":{"start":{"line":102,"character":38},"end":{"line":102,"character":39}},"source":"libadalang","message":"Missing
> >
> ';'"},{"range":{"start":{"line":102,"character":38},"end":{"line":102,"character":39}},"source":"libadalang","message":"Skipped
> > token
> )"},{"range":{"start":{"line":0,"character":0},"end":{"line":0,"character":0}},"severity":4,"source":"ada.project","message":""}]}}
> > [jsonrpc] e[09:50:52.445] <-- textDocument/hover[95]
> > {"jsonrpc":"2.0","id":95,"result":null}
> > [jsonrpc] e[09:50:52.454] <-- textDocument/documentHighlight[96]
> > {"jsonrpc":"2.0","id":96,"result":null}
> > [jsonrpc] e[09:50:52.454] <-- textDocument/signatureHelp[97]
> > {"jsonrpc":"2.0","id":97,"result":{"signatures":[{"label":"function
> > Internal (Name : String; Thing : String) return
> >
> GType","documentation":"","parameters":[{"label":"Name"},{"label":"Thing"}],"activeParameter":1}],"activeSignature":0,"activeParameter":0}}
> >
> > I believe the reason for Eglot's behavior is due to the way
> > "active-param" is specified in the cl-loop within `eglot--sig-info`.
> > ```text
> > with active-param = (or sig-active activeParameter)
> > ```
> > The value of activeParameter in SignatureInformation (activeParameter)
> > should be given higher priority (i.e., listed first) over the
> > activeParameter specified in SignatureHelp (sig-active).
>
> João, any comments or suggestions?
>