LuaLS / LuaLS/lua-language-server
Class generics produce unusable and wrong union types
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
### 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 `` in many places**
```lua
local _lua_setmetatable = setmetatable
Stack = {}
--- @generic T
--- @class Stack : {
--- Pop: (fun(self: Stack): T),
--- Peek: (fun(self: Stack): T),
--- Push: (fun(self: Stack, value: T): Stack),
--- }
--- @field protected _stack any[]
--- @field protected _count integer
Stack.__index = {}
--- Creates a new, empty stack.
--- @generic T
--- @return Stack
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_
Guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Direção de pesquisa
Reproduza o problema analisando o snippet de Lua no VS Code com o lua-language-server instalado, concentrando-se nas dicas de conclusão para Stack.New e nos métodos Peek, Pop e Push. Compare os tipos inferidos de a, b e c com as dicas de método esperadas sem tipos união; considera-se concluído quando os métodos não exibirem mais tipos união inutilizáveis ou desnecessários nem placeholders genéricos indevidos.
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