LuaLS / LuaLS/lua-language-server

@generic 不验证类型是否一致

Đang mở
#3,454 1 bình luận 0 reaction 0 người được giao Xem trên GitHub

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
---@class TestBase
---@class TestDerived1 : TestBase
---@class TestDerived2 : TestBase

---@generic T:TestBase
---@param v1 T
---@param v2 T
local function foo(v1, v2) end
```

我给 `foo` 的 `v1`, `v2` 标注了同一个 `T`,因此期望它们类型是一致的

```lua
local t1 ---@type TestDerived1
local t2 ---@type TestDerived2

foo(t1, t2)
```

这应该报错

### Actual Behaviour

可实际上没有。因为泛型只对每一个参数进行独立的多态类型检查,都继承同一个父类自然没有报错。

当然,同一个泛型的一致性是完全一致还是多态一致,可以归结为一种设计考虑。当前的逻辑也许不算太坏。

但是,如果再加上返回值,结果就会变得很奇怪。

Image

返回值同样是 `T`,可是却变成第一个参数的类型了!无论从哪个角度想都不合理。

### Reproduction steps

复制上述代码查看悬停类型提示即可

### Additional Notes

建议:

校验由 @generic 标注的同一个泛型必须是同一类型

或者:在类型不同时不要推断为第一个类型而是基类类型

### Log File

_No response_

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. 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.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Hướng nghiên cứu

Không có tệp mã nguồn hoặc bài kiểm thử nào được nêu tên. Hãy tái hiện vấn đề bằng đoạn mã Lua được cung cấp và kiểm tra các đường dẫn kiểm tra kiểu generic cũng như suy luận kiểu trả về, sau đó theo dõi cách một tham số generic được ràng buộc qua nhiều đối số. Công việc được xem là hoàn tất khi hành vi cùng kiểu đã chọn được phản ánh nhất quán trong các chẩn đoán và kết quả hover, kèm theo kiểm thử hồi quy nếu dự án có vị trí kiểm thử phù hợp.

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
Sôi nổi
Độ rõ ràng
Khá rõ ràng
Mức phù hợp với người mới
45/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.