LuaLS / LuaLS/lua-language-server
Feature Request: ability to overload the return value type
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
### How are you using the lua-language-server?
Visual Studio Code Extension (sumneko.lua)
### Which OS are you using?
macOS
### What is the issue affecting?
Annotations
### Feature request
In my game's ECS bindings I have getter functions that work like this:
```
---@param id integer
---@return number? inv_mass
---@return number? restitution
function ecs.get_collision_body_values(id) end
local inv_mass, restitution = ecs.get_collision_body_values(entity_id)
```
This calls into a native ECS implementation that either pushes the 2 return values and returns with `return 2;` (2 return values) or if the return values doesn't exist, push nothing and `return 0;` (zero return values).
This can be used in my game code like this:
```
local function debug_body(id)
local inv_mass, restitution = ecs.get_collision_body_values(id)
if inv_mass == nil then -- collision_body component not set, do nothing
return
end
---@cast restitution number
-- ^^ have to cast restitution number? -> number to avoid warning
print(inv_mass, restitution)
end
```
Would be nice if there was a way to annotate an "all or nothing" multiple return value type. E.g., a function will either return multiple return values (e.g., not `number?` but `number`) or that it will return nothing. Or I guess more generally, the ability to somehow specify a union of different multivalue return types.
FWIW, it'd be possible to return "a bunch of values" or "nothing" by using a `table?` return type. However, I'm trying very hard not to allocate tables in my hot game's hot paths, thus I favor concrete types and multiple return.
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par retracer la manière dont le serveur de langage représente les valeurs de retour multiples annotées et les vérifie aux sites d’appel. Utilisez l’exemple ECS de l’issue comme comportement à étudier, y compris les cas à zéro et à deux valeurs. Le travail est terminé lorsqu’une annotation prise en charge peut exprimer des retours multivaleurs tout-ou-rien ou réunis, sans nécessiter le cast montré, et que les diagnostics couvrent les deux cas.
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é
- Calme
- Clarté
- Plutôt claire
- Accessibilité débutants
- 45/100