LuaLS / LuaLS/lua-language-server

Returning generics with `T<X, Y>`

Aberta
#1,000 2 comentários 5 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

enhancement feat/generic feat/LuaCats Annotations
Linguagem predominante
Lua
Estrelas
4.4k
Forks
442
Métricas de merge de PRs
Nenhum PR com merge em 30d

Descrição

Below, I have a generic list that uses fluid interface to return itself for some methods:

--- @class List
local List = {}

--- @generic T : List, V, _
--- @param self T<V, _>
--- @param value V         # Element value to insert
--- @return T<V, _>        # Returning itself (a generic)
function List:insert(value)
    return self           -- Returning itself (a generic)
end

-- test
---@type List<number, nil>
local mylist

local testingType = mylist:insert(1)
-- ^ Testing type is not `List<number, nil>` but literally `T<V, _>`

image

Expected behavior
testingType is of type List<number, nil>

I am thinking that this case could be something to look at for the 3.0 update.

(Edit: perfect #1000th issue...)

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

O payload não menciona nenhum arquivo-fonte nem teste. Comece reproduzindo o exemplo fornecido de List:insert e compare o tipo inferido com o esperado List<number, nil>; em seguida, rastreie a inferência do tipo de retorno genérico e adicione um teste de regressão confirmando que o resultado não é mais o literal T<V, _>.

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
4/5
Tempo estimado
3-5 dias
Status de atividade
Estagnada
Clareza
Razoavelmente clara
Facilidade para iniciantes
35/100

Receba novas issues na sua caixa de entrada

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