LuaLS / LuaLS/lua-language-server
Class generics produce unusable and wrong union types
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?
MacOS, Windows
What is the issue affecting?
Completion
Expected Behaviour
Methods Peek,Push,Pop have proper type hints
Actual Behaviour
While types of a, b, c are correct the
type hints of methods are unusable with unnecessary union types.
If Push is removed from superclass, then type hints go to normal without unions but still with <T> in many places
local _lua_setmetatable = setmetatable
Stack = {}
--- @generic T
--- @class Stack<T> : {
--- Pop: (fun(self: Stack<T>): T),
--- Peek: (fun(self: Stack<T>): T),
--- Push: (fun(self: Stack<T>, value: T): Stack<T>),
--- }
--- @field protected _stack any[]
--- @field protected _count integer
Stack.__index = {}
--- Creates a new, empty stack.
--- @generic T
--- @return Stack<T>
function Stack.New()
local this = {
_stack = {},
_count = 0,
}
return _lua_setmetatable(this, Stack)
end
local st = Stack.New() --[[@as Stack<{ num: integer }>]]
local a = st:Peek()
local b = st:Pop()
local c = st:Push({})
Reproduction steps
Analyze specified code in VSCode with luals installed
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
Reproduce el problema analizando el fragmento de Lua en VS Code con lua-language-server instalado, centrándote en las sugerencias de completado para Stack.New y los métodos Peek, Pop y Push. Compara los tipos inferidos de a, b y c con las sugerencias de métodos esperadas sin tipos unión; se considera terminado cuando los métodos ya no muestran tipos unión inutilizables o innecesarios ni marcadores de posición genéricos sobrantes.
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
- 35/100