LuaLS / LuaLS/lua-language-server
[Annotations] false positive param-type-mismatch on a class member function
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?
NeoVim
Which OS are you using?
Linux
What is the issue affecting?
Annotations
Expected Behaviour
I believe there should be no param-type-mismatch error or such cases should have better documentation if there's a workaround available.
Actual Behaviour
I have a following class structure:
- base class BaseWidget
- BaseContainer which inherits from BaseWidget
- DialogWindow which inherits from BaseContainer
Creating a member function in DialogWindow and calling it results in an param-type-mismatch error.
Reproduction steps
Issue can be reproduced with the following simplified code snippet:
---@class BaseWidget
---@field _config table
---@field uiObject table
---@field build fun(BaseWidget, boolean)
local BaseWidget = {}
BaseWidget.__index = BaseWidget
---@return BaseWidget
function BaseWidget.new()
local instance = setmetatable({}, BaseWidget)
instance._config = {}
instance.uiObject = nil
instance:setAnchor(0, 0)
return instance
end
function BaseWidget:setAnchor(left, top, right, bottom)
print("Base setAnchor")
return self
end
---@class BaseContainer: BaseWidget
local BaseContainer = BaseWidget.new()
BaseContainer.__index = BaseContainer
---@return BaseContainer|BaseWidget
function BaseContainer.new()
---@type BaseContainer|BaseWidget
local instance = setmetatable(BaseWidget.new(), BaseContainer)
instance.uiObject = nil
return instance
end
function BaseWidget:addRow()
print("BaseContainer addRow")
return self
end
---@class Button: BaseWidget
---@field uiObject table
---@field parent table
local Button = BaseWidget.new()
Button.__index = Button
function Button.new(label, icon)
local button = setmetatable(BaseWidget.new(), Button)
return button
end
function Button:build(parent)
print("btn build")
end
---@class DialogWindow: BaseContainer
---@field baseInput table
---@field frame table
local DialogWindow = BaseContainer.new()
DialogWindow.__index = DialogWindow
function DialogWindow.new(dialogWidth)
local window = setmetatable(BaseContainer.new(), DialogWindow)
window:append(Button.new("Test00", nil):setAnchor(0, 0)) -- param-type-mismatch error shows up here
return window
end
---@param uiObj BaseWidget
function DialogWindow:append(uiObj)
uiObj:build(self.frame)
end
Additional Notes
No response
Log File
No response
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
Commencez par la reproduction Lua simplifiée et examinez la manière dont les annotations et le diagnostic param-type-mismatch sont traités pour les fonctions membres de classe héritées. Confirmez le diagnostic lors de l’appel Button.new(...):setAnchor(...), puis vérifiez que le comportement corrigé couvre ce modèle d’héritage sans introduire de nouveaux mismatches.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- lua
- Domaine
- tooling
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 35/100