LuaLS / LuaLS/lua-language-server
Ipairs with generic
Abierto
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Lua
- Estrellas
- 4.4k
- Forks
- 442
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Descripción
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?
Annotations
Expected Behaviour
Should have got a correct type inference in a generic function.
Actual Behaviour
- could not specify a
V-related type forresultin the generic function ipairswill be inferred asunknown- returns of the generic function will be inferred as a strange type
Reproduction steps
---@class Test
---@field name string
---@type Test[]
local tests = {
{ name = "test1" },
{ name = "test2" },
{ name = "test3" },
}
--[[
CORRECT:
function group_by(rows: <V>[], key: string)
-> table<string, <V>[]>
]]
---@generic V
---@param rows V[]
---@param key string
---@return table<string, V[]>
local function group_by(rows, key)
--[[
---@type table<string, V[]>
GOT: Undefined type or alias `V`.
]]
local result = {}
-- WRONG: local v: unknown
for i, v in ipairs(rows) do
local k = v[key]
if not result[k] then
result[k] = {}
end
table.insert(result[k], v)
end
return result
end
--[[
WRONG:
local groups: table<string, <V>[]> | { [<K>]: Test }
EXPECTED:
local groups: table<string, Test[]>
]]
local groups = group_by(tests, "name")
Additional Notes
No response
Log File
No response
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comienza reproduciendo el fragmento de Lua del issue e inspecciona las rutas de anotaciones genéricas, acceso indexado e inferencia de tipos de ipairs del servidor de lenguaje. Se considera terminado cuando V se acepta en la anotación del resultado local, ipairs produce el tipo de elemento genérico y group_by(tests, "name") se infiere como table<string, Test[]>.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- lua
- Área
- devtools
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 42/100