LuaLS / LuaLS/lua-language-server

泛型类的成员函数通过@param注解的类泛型参数无法与调用时传入的实参正确匹配

Aberta
#3,398 1 comentário 0 reações 0 responsáveis Ver no GitHub

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?

Windows

What is the issue affecting?

Diagnostics/Syntax Checking

Expected Behaviour

如题,下面的 stringBox.combine(text, "true") 应该不会显示任何诊断问题:

---@generic T
---@class Box<T>
---@field storedValue T
---@field combine2 fun(first: T, second: T): T
local Box = {}

---@param first T
---@param second T
---@return T
function Box.combine(first, second) end

---@type Box<string>
local stringBox

local text = "123"
local r1 = stringBox.combine(text, "true")
local r2 = stringBox.combine2(text, "true")
Actual Behaviour

stringBox.combine(text, "true") 的两个参数均被诊断为:

Cannot assign `string` to parameter `T`.
- `string` cannot match `T`
- Type `string` cannot match `T`

而用@field声明的同类型函数combine2却能正常识别实参

Image
Reproduction steps
  1. 复制我提供的复现代码,检查诊断结果
Additional Notes

No response

Log File

No response

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.

Direção de pesquisa

Comece reproduzindo os diagnósticos no exemplo de Lua fornecido por meio da extensão do Visual Studio Code, comparando o método declarado com anotações @param com a função @field equivalente. Rastreie a correspondência de tipos genéricos usada para stringBox.combine; a tarefa estará concluída quando ambos os argumentos não produzirem mais diagnósticos, enquanto combine2 continuar sendo tratado corretamente.

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
Pouca atividade
Clareza
Razoavelmente clara
Facilidade para iniciantes
48/100

Receba novas issues na sua caixa de entrada

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