Description
I noticed recently that in nvim-dap, if you complete com.
and select an entry you get com.com...
inserted, so today I took a closer look and noticed that the responses from java-debug are somewhat odd - and I think incorrect.
With a client that specified columnsStartAt1 = true
, and a completions
payload like:
{
frameId = <frameId>,
text = "List.",
column = 6
}
The responses include:
}, {
label = "of(E e1, E e2, E e3, E e4) : List<E>",
number = 0,
sortText = "999999179",
start = 0,
text = "of()",
type = "function"
}, {
The specification says:
/**
- Start position (within the
text
attribute of thecompletions
request)- where the completion text is added. The position is measured in UTF-16 code
- units and the client capability
columnsStartAt1
determines whether it is- 0- or 1-based. If the start position is omitted the text is added at the
- location specified by the
column
attribute of thecompletions
request.
*/
start?: number;
The expected result for the user is to have List.of()
if the completion candidate is selected. Now, start=0
is already odd given the columnsStartAt1
, so a possible interpretation in the client is that it's absent, and that the client should just append .of()
This is kinda what I did in nvim-dap so far, and it works for the List.of
case, and also for variables, but with a payload like:
{
column = 5,
frameId = <frameId>,
text = "com."
}
I get responses like:
}, {
label = "com.sun.tools.example",
number = 0,
sortText = "999999183",
start = 0,
text = "com.sun.tools.example",
type = "module"
}, {
Opposed to the List.
result, here text
includes the prefix com.
and it's again start=0
. This led to com.com.sun.tools.example
I suspect vscode does some kind of prefix matching on the client side again, so this isn't noticable there?
As far as I can tell, based on the specification the current behavior is wrong.
I used JDK 21 in my tests - in case it matters.
I can also provide some sample project if needed - but I tried to use examples that should behave similar with only the JDK as dependency