Better output for Tagged Variants with non-inline record
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Accessibilité débutants
- 45/100
- Type d'issue
- Fonctionnalité
- Clarté
- Plutôt claire
- Activité
- Calme
- Stack technique
- javascript, ocaml
- Domaine
- compilers
Piste de recherche
L’issue fournit un exemple de tagged-variant récursive ainsi que la sortie JavaScript actuelle et celle souhaitée ; commencez par reproduire cet exemple et retracez le chemin du compilateur qui émet les enregistrements de tagged-variant. Établissez les contraintes applicables concernant le tag/nom de champ et l’enregistrement unique, puis vérifiez que l’exemple produit des champs aplatis sans le wrapper _0.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Inline records in Variant provide good JS output, which is especially useful for bindings. When combined with tagged variants, they also provide a better DX.
However, it’s not always possible to inline records (or spread them in the case of recursive types), so I’m wondering if it would be possible to improve the JS output in the case of tagged variants.
One possible constraint would be to verify that the tag does not conflict with any of the record fields. We could also keep the same constraint as inline records: only one record.
@tag("nodeType")
type rec node =
| @as(1) Element(element)
| @as(3) Text(text)
| @as(9) Document(document)
and element = {
childNodes: array<node>,
ownerDocument: null<document>,
}
and text = {
nextElementSibling: null<element>,
}
and document = {
children: array<element>,
}
let anElement = Element({
childNodes: [Text({nextElementSibling: Null.null})],
ownerDocument: Null.null,
})
Current output:
let anElement = {
nodeType: 1,
_0: {
childNodes: [{
nodeType: 3,
_0: {
nextElementSibling: null
}
}],
ownerDocument: null
}
};
Wanted output:
let anElement = {
nodeType: 1,
childNodes: [{
nodeType: 3,
nextElementSibling: null
}],
ownerDocument: null
};
- Langage dominant
- OCaml
- Étoiles
- 7.5k
- Forks
- 485
- Merge moyen
- 1 j 2 h
- PR mergées (30 j)
- 55
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.
Autres issues de rescript-lang/rescript
-
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 35/100
rescript-lang/rescript#8659 · 2 commentaires · 2 réactions ·
-
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 35/100
rescript-lang/rescript#8647 ·
-
rescript-lang/rescript#8632 · 1 personne assignée ·
-
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 28/100
rescript-lang/rescript#8624 ·
-
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 30/100
rescript-lang/rescript#8596 · 2 commentaires ·
Toutes les issues de rescript-lang/rescript
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
-
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
JakeChampion/lang#10213 ·
-
bug language-server
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
purefunctor/purescript-iris#552 ·
-
enhancement good first issue needs testing
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
bradcypert/plum#58 ·