LuaLS / LuaLS/lua-language-server
Properties (getter/setter) support
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Lua
- Sterne
- 4.4k
- Forks
- 442
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Beschreibung
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.
-- 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
-- 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)
It should be annotated as "position's setter receives a table<number, number>, and its getter returns a Point."
How about adding a new syntax to describe this?
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne mit den Annotationsbeispielen in hoge.meta.lua und main.lua und reproduziere dann die Diagnose für die Zuweisung einer Tabelle an hoge.position. Das Issue nennt keine Repository-Dateien oder Tests, daher müssen die relevanten Einstiegsstellen für Annotationen und Typprüfung gefunden werden. Erledigt ist die Aufgabe, wenn die Annotationssyntax unterschiedliche Setter- und Getter-Typen ausdrücken kann und die Beispielzuweisung nicht mehr das Fehlen von Point-Feldern meldet.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- lua
- Bereich
- devtools
- Issue-Typ
- Feature
- Schwierigkeit
- 5/5
- Geschätzter Aufwand
- Über eine Woche
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 30/100