LuaLS / LuaLS/lua-language-server
`---@cast` annotation doesn't respect scope rules
Nessuno ha ancora preso questa issue.
- Lingua principale
- Lua
- Stelle
- 4.4k
- Fork
- 442
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Descrizione
### 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
The `---@cast` annotation should respect Lua scoping rules.
### Actual Behaviour
Let's consider:
```lua
--- @class foo
--- @field a number
--- @class bar
--- @field b string
--- @type { [integer]: foo|bar }
local array = {}
for i, instance in ipairs(array) do
if instance.a then
-- First if block
--- @cast instance foo
end
if instance.b then
-- Second if block
end
end
```
In the first if block, we cast the `instance` to the `foo` type. When hovering over the `instance` variable in the second if block we can see its type is `foo`. It would be expected for its type to be `bar` since the `---@cast` happened in different scope.

### Reproduction steps
1. Copy-paste the given example code into your text editor.
2. Hover over the `instance` variable in the second if block.
3. See the error in the popup.
### Additional Notes
_No response_
### Log File
_No response_
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia riproducendo il problema con l’esempio Lua fornito nell’estensione Visual Studio Code e verifica come il controllo dei tipi gestisce gli scope dei due blocchi if. Il lavoro è completato quando il cast a foo si applica solo all’interno del primo blocco, mentre l’istanza nel secondo blocco mantiene il tipo inferito appropriato invece di foo.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- lua
- Ambito
- devtools
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Specificata chiaramente
- Idoneità per principianti
- 42/100