Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

@generic 不验证类型是否一致

Aperta
#3,454 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
45/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Attiva
Stack tecnologico
lua
Ambito
devtools

Direzione di ricerca

Non viene indicato alcun file sorgente né alcun test. Riproduci il problema con lo snippet Lua fornito e analizza i percorsi di verifica dei tipi generici e di inferenza del tipo restituito, quindi traccia il modo in cui un parametro generico viene associato a più argomenti. Il lavoro è completato quando il comportamento scelto per lo stesso tipo è rappresentato in modo coerente nella diagnostica e nei risultati dell’hover, con una copertura di regressione se il progetto dispone di una posizione di test applicabile.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

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?

Type Checking

Expected Behaviour

假设有这样的代码:

---@class TestBase
---@class TestDerived1 : TestBase
---@class TestDerived2 : TestBase

---@generic T:TestBase
---@param v1 T
---@param v2 T
local function foo(v1, v2) end

我给 foov1, v2 标注了同一个 T,因此期望它们类型是一致的

local t1 ---@type TestDerived1
local t2 ---@type TestDerived2

foo(t1, t2)

这应该报错

Actual Behaviour

可实际上没有。因为泛型只对每一个参数进行独立的多态类型检查,都继承同一个父类自然没有报错。

当然,同一个泛型的一致性是完全一致还是多态一致,可以归结为一种设计考虑。当前的逻辑也许不算太坏。

但是,如果再加上返回值,结果就会变得很奇怪。

Image

返回值同样是 T,可是却变成第一个参数的类型了!无论从哪个角度想都不合理。

Reproduction steps

复制上述代码查看悬停类型提示即可

Additional Notes

建议:

校验由 @generic 标注的同一个泛型必须是同一类型

或者:在类型不同时不要推断为第一个类型而是基类类型

Log File

No response

Lingua principale
Lua
Stelle
4.4k
Fork
442
Merge medio
8g 9h
PR unite (30g)
1

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di LuaLS/lua-language-server

Tutte le issue di LuaLS/lua-language-server

Issue simili

Altre issue su Lua

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.