LuaLS / LuaLS/lua-language-server

Union table|class doesn't accept a generic table and only accepts a class instance (causing false missing-fields diagnostic)

Đang mở
#2,606 3 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, Diagnostics/Syntax Checking

Expected Behaviour

When a function is declared as accepting both table and a custom class type, it should accept getting passed a generic table.

Actual Behaviour

LLS insists on a table matching the class being passed (with all the fields set) and reports the missing-fields diagnostic when passing a generic table.

Reproduction steps

LLS definition file contains the following:

---@meta

---@class TestClass
---@field TestField number A test field in test class
TestClass = {}

-- TestFunction1
---@param generic_table_or_testclass_instance table|TestClass
function TestFunction1(generic_table_or_testclass_instance) end

-- TestFunction2
---@param generic_table table
---@param testclass_instance TestClass
---@overload fun(generic_table: table)
---@overload fun(testclass_instance: TestClass)
function TestFunction2(generic_table, testclass_instance) end

-- TestFunction3
---@param generic_table table
function TestFunction3(generic_table) end

-- TestFunction3
---@param testclass_instance TestClass
function TestFunction3(testclass_instance) end

And then a lua code file contains a call to either test function like

TestFunction1({1,2,3})
TestFunction2({1,2,3})
TestFunction3({1,2,3})

LLS reports Missing required fields in type ``TestClass``: ``TestField`` Lua Diagnostics.(missing-fields) for all 3 calls. Instead it should accept the table as input parameter for the 3 functions.

Additional Notes

No response

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

Bắt đầu với Lua và các chú thích kiểu trong phần tái hiện, sau đó lần theo đường dẫn kiểm tra kiểu tạo ra chẩn đoán trường bị thiếu cho các tham số union và overload. Hoàn tất khi các bảng tổng quát được chấp nhận cho cả ba lệnh gọi mà không báo TestClass.TestField bị thiếu; issue không nêu tên tệp nguồn hay test nào.

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
35/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.