LuaLS / LuaLS/lua-language-server

Issues with event function definition

未關閉
#2,279 1 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視

還沒有人認領這個 Issue。

主要語言
Lua
星號
4.4k
分支
442
PR 合併指標
30 天內沒有已合併 PR

描述

When trying to create an event rpc function I ran into several type issue.

---@enum EventAudienceEnum
EventAudienceEnum = {
	ALL = "ALL",
	ALL_BUT_SELF = "ALL_BUT_SELF",
	SELF = "SELF",
	SELECT = "SELECT",
	SERVER = "SERVER",
	OWNER = "OWNER",
}

---@class EventAudienceSelect
---@field [0] EventAudienceEnum.SELECT
---@field peer_ids string | string[]

---@class EventAudienceOwner
---@field [0] EventAudienceEnum.OWNER
---@field unit string


---@alias EventAudience
---| EventAudienceEnum.ALL  # comment
---| EventAudienceEnum.ALL_BUT_SELF  # comment
---| EventAudienceEnum.SELF  # comment
---| EventAudienceEnum.SERVER  # comment
---| EventAudienceSelect # comment
---| EventAudienceOwner  # comment

--- Send event
---@param audience EventAudience who to send the event to
---@param event string event to call
---@param ... any params to pass to the event
function Events.send_event(audience, event, ...)
end

Issue 1: Can't use specific enums as types (https://github.com/LuaLS/lua-language-server/issues/2274)
Issue 2: You do not get the missing field diagnostic on 'dictionary', or 'table-literal' types
Ex:

---@param audience { [0]: "SELECT", ["peer_ids"]: string | string[] } who to send event to
---@param event string event to call
---@param ... any params to pass to the event
function Events.send_event(audience, event, ...)
end

Events.send_event({
}, "test", "test")

and

---@param audience { [0]: "SELECT", peer_ids: string | string[] } who to send event to
---@param event string event to call
---@param ... any params to pass to the event
function Events.send_event(audience, event, ...)
end

Events.send_event({
}, "test", "test")

gives no errors

Issue 3: Alias comments only show stuff for strings or numbers

Screenshot_4

I would have expected the alias comment here to also say

 | EventAudienceSelect 
 | EventAudienceOwner

Issue 4: There is no missing-param diagnostic for 'number' fields:

Events.send_event({peer_ids = {}}, "test", "test")

I would have expected an error here:

Screenshot_5

but none is given

Issue 5: There is no type-checking on 'number' fields of classes, unless you explicitly call out the number. For example there is no error here:

Screenshot_6

even though there is an error here:

Screenshot_7

Issue 6: There are issues with the missing field diagnostic and unions. For example I get an error that I need to define peer_ids here:
Screenshot_8

when I would expect it to work as EventAudienceOwener has no peer_ids. I expect this is related to https://github.com/LuaLS/lua-language-server/issues/2252 (and https://github.com/LuaLS/lua-language-server/issues/2102)

Until unions are properly implemented, it would nice to be able to disable the missing-field-diagnostic at the table level instead of at the usage level. (Something like suggested here: https://github.com/LuaLS/lua-language-server/issues/2220)

Sorry this was a little long, let me know if you want me to seperate this out into seperate issues 👍

貢獻指南

開啟貢獻指南

從這裡開始

  1. 先讀完整個 Issue,再讀專案的貢獻指南。
  2. 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
  3. Fork 儲存庫,在一個分支上完成修改。
  4. 送出 Pull Request,並在描述裡引用這個 Issue 編號。

研究方向

首先重現 issue #2279 中的六個型別檢查與診斷範例,然後將行為與相關 issue #2274、#2252、#2102 和 #2220 進行比較。完成這項工作需要釐清範圍,並驗證所選 enum、missing-field、alias-comment、numeric-field 和 union case 的行為。

由索引模型根據 Issue 內容生成。

評估

技術堆疊
lua
領域
devtools
Issue 類型
缺陷
難度
5/5
預估耗時
一週以上
活躍度
停滯
描述清晰度
需要釐清
新手友好度
25/100

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。