Better output for Tagged Variants with non-inline record
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 5/5
- Geschätzter Aufwand
- Über eine Woche
- Anfängerfreundlichkeit
- 45/100
- Issue-Typ
- Feature
- Klarheit
- Größtenteils klar
- Aktivitätsstatus
- Ruhig
- Tech-Stack
- javascript, ocaml
- Bereich
- compilers
Rechercherichtung
Das Issue enthält ein Beispiel für eine rekursive Tagged-Variant sowie die aktuelle und die gewünschte JavaScript-Ausgabe; reproduziere zunächst dieses Beispiel und verfolge den Compiler-Pfad, der Datensätze für Tagged-Variants ausgibt. Ermittle die geltenden Einschränkungen für Tag/Feldnamen und einzelne Datensätze und überprüfe anschließend, dass das Beispiel abgeflachte Felder ohne den _0-Wrapper erzeugt.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
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
};
- Vorherrschende Sprache
- OCaml
- Sterne
- 7.5k
- Forks
- 485
- Ø Merge
- 1 T. 2 Std.
- Gemergte PRs (30 T.)
- 55
Beitragsleitfaden
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus rescript-lang/rescript
-
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 35/100
rescript-lang/rescript#8659 · 2 Kommentare · 2 Reaktionen ·
-
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 35/100
rescript-lang/rescript#8647 ·
-
rescript-lang/rescript#8632 · 1 zugewiesene Person ·
-
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 28/100
rescript-lang/rescript#8624 ·
-
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 30/100
rescript-lang/rescript#8596 · 2 Kommentare ·
Alle Issues in rescript-lang/rescript
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 75/100
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 75/100
JakeChampion/lang#10213 ·
-
bug language-server
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 70/100
purefunctor/purescript-iris#552 ·
-
enhancement good first issue needs testing
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 75/100
-
bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 75/100
bradcypert/plum#58 ·