LuaLS / LuaLS/lua-language-server

Issues with event function definition

Aberta
#2,279 1 comentário 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

Linguagem predominante
Lua
Estrelas
4.4k
Forks
442
Métricas de merge de PRs
Nenhum PR com merge em 30d

Descrição

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 👍

Guia de contribuição

Abrir o guia de contribuição

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Direção de pesquisa

Comece reproduzindo os seis exemplos de verificação de tipos e diagnóstico na issue #2279 e, em seguida, compare o comportamento com o das issues relacionadas #2274, #2252, #2102 e #2220. O trabalho estará concluído quando houver um escopo esclarecido e um comportamento verificado para os casos selecionados de enum, missing-field, alias-comment, numeric-field e union.

Escrita pelo modelo de indexação a partir do texto da issue.

Avaliação

Stack de tecnologia
lua
Domínio
devtools
Tipo de issue
Bug
Dificuldade
5/5
Tempo estimado
Mais de uma semana
Status de atividade
Estagnada
Clareza
Precisa de esclarecimento
Facilidade para iniciantes
25/100

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.