LuaLS / LuaLS/lua-language-server

Difference in behavior between table literal, dictionary, and class in terms of completion

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

Personne n'a encore pris cette issue.

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

Description

Maybe more of a feature request than a bug, but I noticed some interesting differences between classes, dictionaries, and table literals in terms of completions.

Using this code as a base:

---@class TestClass
---@field test_group TestGroup

---@class TestGroup
---@field test_field string

---@alias TestTableDictionary {["test_group"]: {["test_field"]: string}}

---@alias TestTableLiteral {test_group: {test_field: string}}

---@type TestClass
local test_class
local test_group = "test_group"

local test1 = test_class["test_group"].test_field

---@type TestTableDictionary
local test_table_dictionary
local test_group = "test_group"

local test2 = test_table_dictionary[test_group].test_field

---@type TestTableLiteral
local test_table_literal
local test_group = "test_group"

local test3 = test_table_literal[test_group].test_field

I would expect the completion for test1, test2, and test3 to be equivalent. However there are some interesting differences.

For test 1 if we do this local test1 = test_class[test_group].test_field the type of test1 is unknown and there is no completion suggestions for test_class[test_group]. Both test_class["test_group"].test_field and test_class.test_group.test_field work correctly.

For test 2 test_table_dictionary[test_group].test_field works correctly. test_table_dictionary.test_group.test_field gives the right value but does not show any completion suggestions like the classes do.

For test 3 the table literal is the best of all worlds. You can do test_table_literal[test_group].test_field as well as get completions on test_table_literal.test_group.test_field.

As I am using classes in a lot of places and they are useful as they can be spread across multiple lines and the fields can have longer descriptions it would be awesome to see the ability to do something like test_class[test_group].test_field for classes

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

L’issue ne nomme aucun fichier source ni aucun test ; commencez par retracer, à l’aide des trois exemples Lua, la gestion de la completion par le language server pour les champs de classe, les alias de dictionnaire et les littéraux de table. Le travail est terminé lorsque des expressions indexées et avec notation par points équivalentes fournissent le type attendu et les suggestions de completion attendues.

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

Évaluation

Stack technique
lua
Domaine
developer-experience
Type d'issue
Fonctionnalité
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.