LuaLS / LuaLS/lua-language-server

Annotations with mixins?

Offen
#1,860 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

enhancement
Vorherrschende Sprache
Lua
Sterne
4.4k
Forks
442
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

Hi I'm trying to make annotations that must require the user to have certain fields in a table as a requirement.

For instance, I want a table that needs to have x,y fields, or certain functions.

Here is some pseudo-code that might explain what I mean:

---@class Spinnable
---@field spin fun()

---@class Positionable
---@field x number
---@field y number
---@field setPos fun(x: number, y: number)

---@generic T : Spinnable, Positionable
---@param p1 `T`
---@return T
local function doFunction(p1) return p1 end

local entity = { x = 5 }          -- A table that is missing the other fields
local check = doFunction(entity) -- I want a warning here saying it doesn't have, `y`, `setPos()`, or `spin()`

Is this currently possible to require certain fields in a table?

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne damit, den annotierten Pseudo-Code aus dem Issue zu reproduzieren, und prüfe, wie der language server Klassenannotationen, Generics und Prüfungen von Tabellenfeldern behandelt. Die Aufgabe ist abgeschlossen, wenn eine Tabelle, der y, setPos oder spin fehlt, beim Übergeben an doFunction eine Diagnose erzeugt, während eine kompatible Tabelle akzeptiert wird.

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
25/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.