LuaLS / LuaLS/lua-language-server
Problem with methods of generic classes
Personne n'a encore pris cette issue.
- Langage dominant
- Lua
- Étoiles
- 4.4k
- Forks
- 442
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Description
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, Annotations
Expected Behaviour
- Define a generic base class Foo with a method function which returns the generic type
- Inherit from the base class and specify the generic type
- Use the method and expect the specified generic type on the output
---@class Foo<T>
---@field myValue T
local base = {}
---@return T
function base:get()
return self.myValue
end
---@type Foo<number>
local ex1 = base --Use class directly
---@class Example2 : Foo<string>
local ex2 = ex1 --Start with a version with generic type specified
---@class Example3 : Foo<boolean>
local ex3 = base --Start with a version without the generic type specified
local I = ex1.myValue --Correct: number
local a = ex1:get() --Correct: number
local II = ex2.myValue --Correct: string
local b = ex2:get() --Correct: string
local III = ex3.myValue --Correct: boolean
local c = ex3:get() --Correct: boolean
Actual Behaviour
Attempting to expand the parent class directly displays a warning, (Example 3) but using a variable with specified type does not (Example 2).
The method defined in the parent class fails to infer the generic type from the child classes
---@class Foo<T>
---@field myValue T
local base = {}
---@return T
function base:get()
return self.myValue
end
---@type Foo<number>
local ex1 = base
---@class Example2 : Foo<string>
local ex2 = ex1
---@class Example3 : Foo<boolean>
local ex3 = base --Cannot assign 'Foo' to 'Example3'
local I = ex1.myValue --Correct: number
local a = ex1:get() --Correct: number
local II = ex2.myValue --Correct: string
local b = ex2:get() --Incorrect: T
local III = ex3.myValue --Correct: boolean
local c = ex3:get() --Incorrect: T
Reproduction steps
- Define a generic base class with a method function which returns the generic type
- Inherit from the base class and specify the generic type
- Use the method and expect the specified generic type on the output
Additional Notes
No response
Log File
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Reproduisez l’exemple d’héritage générique de Foo de l’issue dans l’extension Visual Studio Code et examinez service.log pour obtenir les diagnostics de vérification des types. Suivez la manière dont les méthodes héritées substituent les types de retour génériques, puis vérifiez que get() se résout en string et boolean pour Example2 et Example3 sans introduire d’avertissements incorrects.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- lua
- Domaine
- developer-experience, devtools
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 45/100