LuaLS / LuaLS/lua-language-server
Class inheriting a generic class with specified type not recognized as inherited class (assign-type-mismatch)
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?
Windows
What is the issue affecting?
Type Checking
Expected Behaviour
The type of a class inheriting a generic class (when specifying the type) should be recognized as the same type as the class it inherits.
If that generic class inherits another class, that should also be recognized.
As such, the following code should have no problems.
--- @class Test_Base
--- @field Str_A string
local Test_Base = {}
--- @generic T
--- @class Test_Generic<T> : Test_Base
--- @field Gen_T T
local Test_Generic = {}
--- @class Test_Class : Test_Generic<string>
local Test_Class = {}
--- @type Test_Base[]
local testArray = {
Test_Base,
Test_Generic,
Test_Class,
}
Actual Behaviour
"Test_Class" isn't recognized as either "Test_Generic" or "Test_Base", therefore showing as an "assign-type-mismatch" error.
However, inheriting the generic class without specifying the type is completely fine.
--- @class Test_Base
--- @field Str_A string
local Test_Base = {}
--- @generic T
--- @class Test_Generic<T> : Test_Base
--- @field Gen_T T
local Test_Generic = {}
--- @class Test_Class : Test_Generic
local Test_Class = {}
--- @type Test_Base[]
local testArray = {
Test_Base,
Test_Generic,
Test_Class,
}
Reproduction steps
--- @class Test_Base
--- @field Str_A string
local Test_Base = {}
--- @generic T
--- @class Test_Generic<T> : Test_Base
--- @field Gen_T T
local Test_Generic = {}
--- @class Test_Class1 : Test_Generic<string>
local Test_Class1 = {}
--- @class Test_Class2 : Test_Generic
local Test_Class2 = {}
--- @type Test_Base[]
local testArray = {
Test_Base,
Test_Generic,
Test_Class1,
Test_Class2,
}
Additional Notes
This problem showed up after the release of version 3.17.0
I know that the implementation of generics is complicated, and I've already found a workaround for my use-case by casting the inheriting classes to the type of the underlying base class. But that may not work for others.
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
Empieza con la reproducción en Lua del issue y pásala por la comprobación de tipos de la extensión de Visual Studio Code para observar el diagnóstico assign-type-mismatch. Rastrea el manejo de la herencia de clases genéricas y, a continuación, verifica que Test_Class1 se acepta tanto como Test_Generic como como Test_Base, incluido el caso de herencia transitiva, mientras el comportamiento existente de Test_Class2 sigue siendo válido.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- lua
- Área
- tooling
- 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