microsoft / microsoft/java-debug
CompletionItem of completions response always have `start = 0` and text prefix inclusion is mixed
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- Java
- Star
- 409
- Fork
- 204
- Merge trung bình
- 1 ngày 13 giờ
- Pull request đã merge (30 ngày)
- 4
Mô tả
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
Hướng dẫn đóng góp
Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Hướng nghiên cứu
Bắt đầu bằng cách truy vết việc xử lý completions của máy chủ gỡ lỗi Java đối với yêu cầu completions và phản hồi CompletionItem, sử dụng các ví dụ JDK 21 trong báo cáo. Tái hiện các trường hợp List. và com. bằng một client như nvim-dap, sau đó xác minh rằng start và text tuân theo đặc tả DAP, đồng thời việc chọn từng ứng viên sẽ chèn phần hoàn thành mong đợi mà không nhân đôi tiền tố của nó.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- java
- Lĩnh vực
- devtools
- Loại issue
- Lỗi
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 35/100