LuaLS / LuaLS/lua-language-server

Incorrect type on string-key fields when combined with `[string]`

Open
#3,365 4 comments 0 reactions 0 assignees View on GitHub
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.