LuaLS / LuaLS/lua-language-server

feature: Variadic generic packs and mapping expansion

Ouverte
#2,470 0 commentaires 4 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Langage dominant
Lua
Étoiles
4.4k
Forks
442
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

#1861

This feature request requests variadic generics functionality, as well as mapping those generics. My proposed implementation of this feature request would allow the following example syntax:
```lua
---@generic R, T...
---@param fn fun(...: T...):R
---@param ... Component
---@return System
function System.new(fn, ...)
...
end

---@generic R
---@param System self
---@param entities Entity[]
---@return R[]
function System:run()
...
end
```

The example code above also introduces a shorthand for variadics (line 3): whenever the parameter `...` would have an unexpanded parameter pack as an argument, it is implicitly expanded. Any type can be expanded at any point by suffixing a `...`, as shown in line 2.

The motivation of this request arises from an well-typed ECS implementation with object-oriented systems. Without variadic generics, it is not possible in any way I know of to allow a system to depend on any amount of components and still have well-typed parameters.

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par l’issue associée #1861 et les exemples Lua proposés dans cette issue. Définissez le comportement des packs génériques variadiques, de l’expansion de mapping et de la forme abrégée `...`, puis vérifiez que la System API présentée peut exprimer des paramètres de composants et des valeurs de retour typés.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
lua
Domaine
devtools
Type d'issue
Fonctionnalité
Difficulté
5/5
Temps estimé
Plus d'une semaine
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
30/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.