microsoft / microsoft/java-debug
CompletionItem of completions response always have `start = 0` and text prefix inclusion is mixed
Ninguém assumiu esta issue ainda.
- Linguagem predominante
- Java
- Estrelas
- 409
- Forks
- 204
- Merge médio
- 1d 13h
- PRs com merge (30d)
- 4
Descrição
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
textattribute of thecompletionsrequest)- where the completion text is added. The position is measured in UTF-16 code
- units and the client capability
columnsStartAt1determines whether it is- 0- or 1-based. If the start position is omitted the text is added at the
- location specified by the
columnattribute of thecompletionsrequest.
*/
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
Guia de contribuição
Nenhum guia de contribuição indexado para este repositório
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Direção de pesquisa
Comece rastreando o tratamento de completions do servidor de depuração Java para a solicitação completions e a resposta CompletionItem, usando os exemplos do JDK 21 no relatório. Reproduza os casos List. e com. com um cliente como o nvim-dap e, em seguida, verifique se start e text seguem a especificação DAP e se selecionar cada candidato insere a conclusão esperada sem duplicar seu prefixo.
Escrita pelo modelo de indexação a partir do texto da issue.
Avaliação
- Stack de tecnologia
- java
- Domínio
- devtools
- Tipo de issue
- Bug
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Status de atividade
- Estagnada
- Clareza
- Razoavelmente clara
- Facilidade para iniciantes
- 35/100