LuaLS / LuaLS/lua-language-server

lua-language-server not detecting types when destructuring Tuple types with ~table.unpack~

Ouverte
#2,873 1 commentaire 0 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

### How are you using the lua-language-server?

Other

### Which OS are you using?

Windows

### What is the issue affecting?

Diagnostics/Syntax Checking

### Expected Behaviour

I might be wrong here, but I assume this should work?
Language server should detect the types from the defined tuple:

```lua
---@alias my_tuple { [1]: integer, [2]: boolean }

---@type my_tuple
local tuple = {1, true}

--- This works!
local a, b = tuple[1], tuple[2]

--- This gets "integer" for "c", but "unknown" for "d:
local c, d = table.unpack(tuple)
```

### Actual Behaviour

```lua
---@alias my_tuple { [1]: integer, [2]: boolean }

---@type my_tuple
local tuple = {1, true}

--- "c" should be "integer" and "d" "boolean":
local c, d = table.unpack(tuple)
```

### Reproduction steps

1. Define tuple like I did
2. Create such tuple
3. `unpack` to two variables

### Additional Notes

I'm not sure if this is a feature that is even considered, but since I do use unpack sometimes to destructure tuples into their distinct variables, I feel this would be a good feature to have.

### Log File

_No response_

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 reproduire le problème avec l’exemple de tuple et table.unpack du rapport, puis suivez l’inférence de types du language server pour multiple assignment et unpacked tables. Aucun fichier source ni test n’est nommé ; le travail est considéré comme terminé lorsque l’exemple infère c comme integer et d comme boolean sans provoquer de régression dans les diagnostics existants de tuple.

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

Évaluation

Stack technique
lua
Domaine
tooling
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

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