LuaLS / LuaLS/lua-language-server
@field private in @meta file triggers warning even when accessed within the same class
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?
Annotations
Expected Behaviour
When defining a class in a ---@meta file with @field private annotations, the Lua language server warns about accessing those private fields even when they are accessed within the implementation of the same class (just in a separate file). This makes private fields effectively unusable if you're organizing types in meta files.
The language server should not warn about access to @field private fields when they are accessed within the implementation of the class they belong to, even if that implementation is in a separate file.
I think this is by design rather than a bug, so maybe this is a feature request?
Actual Behaviour
Even though I'm accessing the private field in the implementation of that class, I see a warning:
Reproduction steps
- In types.lua (meta file)
---@meta
---@class (exact) ModuleMixin
---@field private __loaded boolean
---@field Load fun(self)
---@field IsLoaded fun(self): boolean
---@field Init fun(self)
- ModuleMixin.lua (implementation)
---@type SmartChat.ModuleMixin
local ModuleMixin = {}
function ModuleMixin:Init()
self.__loaded = false -- <-- LuaLS warns that __loaded is private
end
Additional Notes
I use a @meta file to separate type annotations from implementation, which is common in larger projects. This issue makes it difficult to use private meaningfully unless everything is co-located in the same file, which defeats the purpose of a metadata/type declaration file.
Would it be possible to make private refer to "the class definition context" rather than "the file only"?
Thanks!
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 cảnh báo bằng các ví dụ types.lua và ModuleMixin.lua, bắt đầu với chẩn đoán trường private trong language server. Theo dõi cách khai báo lớp và tệp triển khai của lớp được liên kết với nhau. Được xem là hoàn tất khi các truy cập từ phần triển khai không còn phát sinh cảnh báo, trong khi các kiểm tra trường private ở những nơi khác vẫn được giữ nguyê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ệ
- lua
- Lĩnh vực
- devtools
- Loại issue
- Tính năng
- Độ 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