LuaLS / LuaLS/lua-language-server
Properties (getter/setter) support
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
Lua's variables can act as C#-like properties by setting `__newindex` appropriately.
Getters and setters occasionally have different type signatures. However, the `@field` annotation can only represent one type.
```lua
-- hoge.meta.lua
---@meta
---@class Point
---@field x number
---@field y number
Point = {}
---@class Hoge
---@field position Point ⚠️ actually a property
Hoge = {}
---@return Hoge
function new_hoge() end
```
```lua
-- main.lua
local hoge = new_hoge()
hoge.position = { 3, 7 } -- emits "Missing required fields in type `Point`: `x`, `y`"
print(hoge.position.x) -- 3.0
print(hoge.position.y) -- 7.0
```
(Full sample program is [here](https://codeberg.org/haruomaki/luaproperty))
It should be annotated as "`position`'s setter receives a `table`, and its getter returns a `Point`."
How about adding a new syntax to describe this?
Guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Direção de pesquisa
Comece com os exemplos de anotação em hoge.meta.lua e main.lua e, em seguida, reproduza o diagnóstico para atribuir uma tabela a hoge.position. A issue não menciona arquivos nem testes do repositório, portanto os pontos de entrada relevantes de anotação e verificação de tipos precisam ser localizados. Está concluído quando a sintaxe de anotação puder expressar tipos distintos de setter e getter e a atribuição de exemplo não relatar mais campos Point ausentes.
Escrita pelo modelo de indexação a partir do texto da issue.
Avaliação
- Stack de tecnologia
- lua
- Domínio
- devtools
- Tipo de issue
- Funcionalidade
- Dificuldade
- 5/5
- Tempo estimado
- Mais de uma semana
- Status de atividade
- Estagnada
- Clareza
- Razoavelmente clara
- Facilidade para iniciantes
- 30/100