LuaLS / LuaLS/lua-language-server
Even if the `self` parameter is defined with another type, it is automatically defined in the body of the function as the type of the object.
Open
Nobody has claimed this yet.
- Dominant language
- Lua
- Stars
- 4.4k
- Forks
- 442
- PR merge metrics
- No merged PRs in 30d
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
Expected Behaviour
test.lua - No error.
---@class Position
---@field x number
---@field y number
---@field z number
Position = {}
---@class Creature
---@field teleportTo fun(self:Creature, position:Position):nil
Creature = {}
---@class Zone
---@field getName fun(self:Zone):string
---@overload fun(): Zone
Zone = {}
---@class Event
---@field onCreatureEnter fun(self:Zone, creature:Creature):nil
---@field onCreatureLeave fun(self:Zone, creature:Creature):nil
---@field register fun(self:Event):nil
---@overload fun(): Event
Event = {}
local zone = Zone()
local zoneEvent = Event()
function zoneEvent:onCreatureEnter(creature)
if self:getName() == zone:getName() then
creature:teleportTo(Position(0, 0, 0))
end
end
zoneEvent:register()
Actual Behaviour
test.lua - Found error.
---@class Position
---@field x number
---@field y number
---@field z number
Position = {}
---@class Creature
---@field teleportTo fun(self:Creature, position:Position):nil
Creature = {}
---@class Zone
---@field getName fun(self:Zone):string
---@overload fun(): Zone
Zone = {}
---@class Event
---@field onCreatureEnter fun(self:Zone, creature:Creature):nil
---@field onCreatureLeave fun(self:Zone, creature:Creature):nil
---@field register fun(self:Event):nil
---@overload fun(): Event
Event = {}
local zone = Zone()
local zoneEvent = Event()
function zoneEvent:onCreatureEnter(creature)
if self:getName() == zone:getName() then
creature:teleportTo(Position(0, 0, 0))
end
end
zoneEvent:register()
Images example
Reproduction steps
Just copy the code and test it in any Lua file.
self should be of type Zone, as that's how it's defined in the meta file.
Additional Notes
No response
Log File
No response
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Reproduce the issue in the Lua language server through the Visual Studio Code extension using the provided test.lua example. Start by tracing type checking for colon-defined methods and the annotated self parameter; done means self is treated as Zone and the example produces no error.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- lua
- Domain
- devtools
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100