LuaLS / LuaLS/lua-language-server
Incorrect type on string-key fields when combined with `[string]`
- 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
we have a (generated) class like
```
---@class GlobalModSettings
---@field ["heat-visualizer-updates-per-surface-per-tick"] ModSetting
---@field ["nixie-tube-update-speed-alpha"] ModSetting
---@field ["nixie-tube-update-speed-numeric"] ModSetting
---@field [string] ModSetting<(int32)|(double)|(boolean)|(string)|(Color)>
```
which has narrower types for the known entries and a general type for the "everything else" field, but when i then use this type like
```
local x = settings.global["heat-visualizer-updates-per-surface-per-tick"]
```
`x` is given the type from the `[string]` field, rather than the one that is an exact match for that specific string
### Actual Behaviour
(this template is always off screen and i've written the whole thing in the first box...)
### Reproduction steps
(this template is always off screen and i've written the whole thing in the first box...)
### Additional Notes
_No response_
### Log File
_No response_
Contributor guide
Research direction
No repository file or test is named. Start by reproducing the annotated GlobalModSettings lookup in the Lua language server through the Visual Studio Code extension, then trace indexed-field type resolution. Done means an exact string-key field receives its narrower type instead of the broader [string] field type.
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
- 38/100