LuaLS / LuaLS/lua-language-server

When using alias values as its keys, Dictionary types don't give completion when defining an instance of that dictionary

Ouverte
#2,589 0 commentaires 1 réaction 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?

Visual Studio Code Extension (sumneko.lua)

Which OS are you using?

Linux

What is the issue affecting?

Completion

Expected Behaviour

When trying to define a table annotated with ---@type {[an_alias]: a_type}, beginning to type a key in the table brings up an_alias's values for automatic completion.

Actual Behaviour

When trying to define a table annotated with ---@type {[an_alias]: a_type}, beginning to type a key in the table will not bring up an_alias's values.

Reproduction steps

Enter the following:

---@alias Flavor
---| "sweet"
---| "spicy"
---| "tangy"
---| "juicy"
---| "tough"
---| "gummy"


---@type {[Flavor]: number}
local test = {

}

Try typing "s" into the empty line in the test table, and it should be able to tell that you'd like to type sweet or spicy because those are members of the Flavor alias, but it does not. It recognizes those words as words found elsewhere in the document and will display them in the autocompletion dropdown as such (below other words found elsewhere in the document that also start with "s"), as shown in this screenshot of a larger file:
image

This might not be the best of examples because there are no other words that start with "s" in the code, but hopefully the issue is still clear. Adding other things (defining variables, using strings, what not) that start with "s" into the example code will give a result like my screenshot.

Additional Notes

I've tried to make this work with the ---@class annotation, and it behaves how I'd expect (the autocompletion dropdown's first results are field names on that class), but it brings up another issue: I'm trying to iterate through an instance of the class, and I don't get the correct return types when using functions like pairs. That makes sense to me - an object is probably not meant to be iterated through, because it likely has fields of different types.

I'm running into this issue because I'm trying to define a dictionary, i.e. a collection of fields that do have the same type. I know all of the names of the fields beforehand, and I define them in an alias. It seems to me that the language server should be able to recognize when I begin typing one of the alias's values in a table that's being defined as a dictionary with that alias as its keys.

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 comportement de complétion avec l’alias Flavor et la table ---@type {[Flavor]: number} présentés dans l’issue. Suivez le point d’entrée de la complétion pour les clés des tables dictionnaire annotées et comparez-le avec la complétion des champs de classe ; le travail est considéré comme terminé lorsque les valeurs de l’alias telles que sweet et spicy sont prioritaires lors de la saisie d’une clé.

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é
3/5
Temps estimé
1-2 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
45/100

Recevez les nouvelles issues par e-mail

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