[JsLIGO] Allow parenthesised type expressions as summands of sum types ("discriminated union")
Motivation and Context
For testing the new sum types, it is useful for the concrete syntax to allow parentheses of summands.
type t = {a: "A"} | ({b: "B"} | {c: "C"});
Description
In fact, the MR allows general union types in the front-end:
type t = int | ["A"] | ["B", string]
and the rest of the pipeline will filter some.
In fact, the parser does not produce T_Sum
nodes directly. Instead, the semantic actions of the new union types filters the unions that could be interpreted as sum types and produce those nodes. This is of course a hack, and, in the future, the node T_Sum
should be removed entirely.
One incompatibility is now the case
type t = ["A",int]
which is parsed now as an array type instead of a sum type. For a sum type, the variant needs to be introduced by a vertical bar, like so:
type t = | ["A", int]
Component
-
compiler -
website -
webide -
vscode-plugin -
debugger
Types of changes
-
Bug fix (non-breaking change which fixes an issue) -
New feature (non-breaking change which adds functionality) -
Breaking change (fix or feature that would cause existing functionality to not work as expected) -
Performance improvement (non-breaking change that improves performance) -
None (change with no changelog)
Changelog
Checklist:
-
If a new syntax has been introduced, put a message on slack ligo-lsp -
Changes follow the existing coding style (use dune @fmt
to check). -
Tests for the changes have been added (for bug fixes / feature). -
Documentation has been updated. -
Changelog description has been added (if appropriate). -
Start titles under ## Changelog
section with #### (if appropriate). -
There is no image or uploaded file in changelog -
Examples in changed behaviour have been added to the changelog (for breaking change / feature).
Edited by Christian Rinderknecht