Hacktoberfest 2026: as issues que os mantenedores marcaram para outubro, abertas e boas para iniciantes. Ver issues do Hacktoberfest

Generic type inference breaks for class-style tables with indexed fields (---@class list<T>: { [integer]: T })

Aberta
#3,375 0 comentários 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
4/5
Tempo estimado
3-5 dias
Facilidade para iniciantes
48/100
Tipo de issue
Bug
Clareza
Razoavelmente clara
Status de atividade
Estagnada
Stack de tecnologia
lua
Domínio
devtools

Direção de pesquisa

Reproduza o exemplo mínimo de Lua na Visual Studio Code extension, começando pelas declarações genéricas de List/listlib e pela anotação de lista no estilo de classe. Rastreie a inferência de tipos para indexed access, at, whereList e front. O trabalho estará concluído quando os tipos inferidos corresponderem aos resultados esperados string, integer e number, em vez de serem unknown ou tipos genéricos não resolvidos.

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

Descrição

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?

Type Checking

Expected Behaviour

---@type string[]
local testA = { }
local testB = { 1, 2, 3 }

local testAA = List(testA)
local testBB = List(testB)

local vAA1 = testAA[1]  -- expected: string
local vBB1 = testBB[1]  -- expected: integer

local vAA2 = testAA:at(1)  -- expected: string
local vBB2 = testBB:at(1)  -- expected: integer

 ---@type list<number>
local testCC = List {}

-- newList -> expected: list<number>
local newList = testCC:whereList(function(a) return a == 0 end)

-- front   -> expected: number
local front = newList:front()
Actual Behaviour
---@type string[]
local testA = { }
local testB = { 1, 2, 3 }

local testAA = List(testA)
local testBB = List(testB)

local vAA1 = testAA[1]  -- actual: string|<T>
local vBB1 = testBB[1]  -- actual: string|<T>

local vAA2 = testAA:at(1)  -- actual: unknown
local vBB2 = testBB:at(1)  -- actual: unknown

 ---@type list<number>
local testCC = List {}

-- newList -> actual: list<<T>>
local newList = testCC:whereList(function(a) return a == 0 end)

-- front   -> actual: unknown
local front = newList:front()
Reproduction steps
---@meta

---@generic T
---@param t T[]
---@return list<T>
function List(t)
    return listlib:new(t);
end

---@class list<T>: { [integer] : T }
listlib = {}

---@generic T
---@param t T[]
---@return list<T>
function listlib:new(t) end

---@generic T
---@param self list<T>
---@param index integer
---@return T
function listlib:at(index) end

---@generic T
---@param self list<T>
---@return T
function listlib:front() end

---@generic T
---@param self list<T>
---@param predicate fun(a: T): boolean
---@return list<T>
function listlib:whereList(predicate) end

---@type string[]
local testA = { }
local testB = { 1, 2, 3 }

local testAA = List(testA)
local testBB = List(testB)

local vAA1 = testAA[1]  -- expected: string, actual: string|<T>
local vBB1 = testBB[1]  -- expected: integer, actual: string|<T>

local vAA2 = testAA:at(1)  -- expected: string, actual: unknown
local vBB2 = testBB:at(1)  -- expected: integer, actual: unknown

 ---@type list<number>
local testCC = List {}

-- newList -> expected: list<number>, actual: list<<T>>
-- front   -> expected: number ,actual: unknown
local newList = testCC:whereList(function(a) return a == 0 end)
local front = newList:front()
Additional Notes

No response

Log File

No response

Linguagem predominante
Lua
Estrelas
4.4k
Forks
442
Merge médio
8d 9h
PRs com merge (30d)
1

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.

Mais de LuaLS/lua-language-server

Todas as issues de LuaLS/lua-language-server

Issues semelhantes

Mais issues de Lua

Receba novas issues na sua caixa de entrada

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