LuaLS / LuaLS/lua-language-server
[Bug] Union when combine table with classified type. Attributes of table are hidden.
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- Lua
- Star
- 4.4k
- Fork
- 442
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Mô tả
### How are you using the lua-language-server?
Visual Studio Code Extension (sumneko.lua)
### Which OS are you using?
Windows
### What is the issue affecting?
Type Checking
### Expected Behaviour
```lua
local data = {}
function data:set(k, v)
rawset(self, k, v)
end
--- @class Person
local Person = {}
function Person:speak() end
--- @generic T
--- @param t T
--- @return T|Person
function merge(t, p)
-- ...
end
local m = merge(data, Person)
m:set -- Completion should show [set(k, v)] 应该提示 set(k,v),对应 data:set(k,v)
```
### Actual Behaviour
```lua
local data = {}
function data:set()
end
--- @class Person
local Person = {}
function Person:speak() end
--- @generic T
--- @param t T
--- @return T|Person
function merge(t, p)
-- ...
end
local m = merge(data, Person)
m:set -- doesn't complete this method, 没显示,只有一个单纯的文本补全
```
But .... 但是... 你换成 {} 而不去声明 `@class Person` 倒是会有的
```lua
local data = {}
function data:set()
end
local Person = {}
function Person:speak() end
--- @generic T
--- @param t T
--- @return T|{speak: function} !!!!! See here !!! 看这里,换成纯粹的 table 到会有
function merge(t, p)
-- ...
end
local m = merge(data, Person)
m:set -- Completion is right and show [set(k,v)],补全正常显示
```
I guess the `@class Person` hides the origin type.
我认为 `@class Person` 把原本的 data 表 属性都给给覆盖掉了。
而且还有个诡异现象,如果 data 给一些 默认值:
`local data = {value = 123}`
不管哪种方式 都能把 默认属性 给补出来。
这很明显这个 luals 的 union 组合有 bug!
### Reproduction steps
See obove
### Additional Notes
_No response_
### Log File
_No response_
Hướng dẫn đóng góp
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
Tái hiện vấn đề trong extension Visual Studio Code bằng các ví dụ Lua được cung cấp, so sánh union với @class Person với kiểu bảng inline. Theo dõi việc kiểm tra kiểu và xử lý completion cho kết quả của merge khi truy vấn m:set. Hoàn thành khi completion bao gồm data:set đồng thời vẫn giữ các thành viên của Person như speak.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- lua
- 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
- 38/100