LuaLS / LuaLS/lua-language-server

Issues with event function definition

オープン
#2,279 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

主要言語
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. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

まず issue #2279 の 6 つの型チェックおよび診断の例を再現し、次に関連する issue #2274、#2252、#2102、#2220 と動作を比較します。完了には、選択した enum、missing-field、alias-comment、numeric-field、union のケースについて、スコープが明確化され、動作が検証されていることが必要です。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
lua
領域
devtools
issue の種類
バグ
難易度
5/5
見積もり時間
1週間以上
活発さ
停滞
明瞭さ
説明が足りない
初心者へのやさしさ
25/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。