LuaLS / LuaLS/lua-language-server

`---@cast` annotation doesn't respect scope rules

Aberta
#2,761 3 comentários 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

Linguagem predominante
Lua
Estrelas
4.4k
Forks
442
Métricas de merge de PRs
Nenhum PR com merge em 30d

Descrição

### 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.
![image](https://github.com/user-attachments/assets/8385fc37-2144-45d0-ab4f-71fbc76c578d)

### 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_

Guia de contribuição

Abrir o guia de contribuição

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Direção de pesquisa

Comece reproduzindo o problema com o exemplo de Lua fornecido na extensão do Visual Studio Code e inspecione como a verificação de tipos trata os escopos dos dois blocos if. Considera-se concluído quando o cast para foo se aplica somente dentro do primeiro bloco, enquanto a instância no segundo bloco mantém o tipo inferido apropriado em vez de foo.

Escrita pelo modelo de indexação a partir do texto da issue.

Avaliação

Stack de tecnologia
lua
Domínio
devtools
Tipo de issue
Bug
Dificuldade
4/5
Tempo estimado
3-5 dias
Status de atividade
Estagnada
Clareza
Claramente especificada
Facilidade para iniciantes
42/100

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.