Completion inside a list literal ignores the element type

Ouverte
#9,212 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

Personne n'a encore pris cette issue.

Évaluation

Difficulté
4/5
Temps estimé
3-5 jours
Accessibilité débutants
48/100
Type d'issue
Bug
Clarté
Plutôt claire
Activité
Active
Stack technique
ocaml
Domaine
devtools

Piste de recherche

Start by comparing the completion context path for array literals with the Type_utils.extract_type behavior described for list<'a>. The issue names no test file, and notes there are no existing completion tests for list literals, so first locate the completion tests and add coverage for typed list elements, including partially typed elements and an empty list. Done means completions use the list element type as they do for arrays.

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

Description

What is broken

Completion inside a list{…} literal doesn't use the list's element type, while the same position in an array literal does:

type kind = First | Second

let arr: array<kind> = [First, ]
//                            ^com First, Second
let ys: list<kind> = list{First, }
//                              ^com nothing
let zs: list<kind> = list{First, Se}
//                                 ^com only `module Set`
let f = (x: list<kind>) => x
let _ = f(list{})
//             ^com nothing

The completion log shows why: for the array the context path is array<Type[kind]> and then Type[kind], but for the list it is Type[list], so the element type kind is lost. A partly typed element then falls back to untyped completion (module Set for Se).

Checked on master ac7357822e. There are no completion tests for list literals, which is why it went unnoticed. It came up while fixing array spreads in #9199 (#9183), which leaves lists alone for this reason.

Possible cause (speculation only)

Type_utils.extract_type has no case for list<'a>, and looking up the built-in list type fails, so there is no element type to complete from.

A related limit: list{...xs, } with a trailing hole is parsed as the plain expression xs, because a spread in tail position is a :: chain, so no completion position remains there.

🤖 Generated with Claude Code

Langage dominant
OCaml
Étoiles
7.5k
Forks
484
Merge moyen
16 h 57 min
PR mergées (30 j)
258

Préparer son environnement

Ouvrir dans Codespaces

Lance le conteneur de développement du projet dans votre navigateur, avec votre propre compte GitHub.

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.

Autres issues de rescript-lang/rescript

Toutes les issues de rescript-lang/rescript

Issues similaires

Plus d'issues DevTools

Recevez les nouvelles issues par e-mail

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