LuaLS / LuaLS/lua-language-server
Overload type narrowing based on number of arguments instead of argument-type
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
With the following code:
```
---@overload fun(param1: "test", param2: string)
---@overload fun(param1: "test2", param2: number)
---@overload fun(param1: "test3", param2: boolean, param3: number)
local function test(...)
end
test("test", "string"); ---expected: good, actual: good
test("test2", 1); ---expected: good, actual: good
test("test3", true, 1); ---expected: good, actual: good
test("test", 1); ---expected: bad, actual: good
test("test2", "string"); ---expected: bad, actual: good
test("test", true, 2) ---expected: bad, actual: bad
test("test3", "string"); ---expected: bad, actual: bad
test("test3", "string", 1); ---expected: bad, actual: bad
test("test3", true); ---expected: bad, actual: bad
```
I get the following errors:
With these overloads I would of expected the type to be equivalent to this:
```
{
param1: "test"
param2: string
} | {
param1: "test2"
param2: number
} | {
param1: "test3"
param2: boolean
param3: number
}
```
However, it is actually equivalent to:
```
{
param1: "test" | "test2"
param2: string | number
} |
{
param1: "test3"
param2: boolean
param3: number
}
```
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
Comece reproduzindo o exemplo de sobrecarga na issue e rastreie o caminho de verificação de tipos do language server para chamadas de funções sobrecarregadas. A correção estará completa quando os tipos dos argumentos restringirem as sobrecargas tanto quanto a quantidade de argumentos, aceitando as três chamadas válidas e rejeitando as chamadas incompatíveis mostradas.
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
- 45/100