Releases: rescript-lang/rescript
Releases · rescript-lang/rescript
11.0.0-alpha.1
🚀 Main New Features
- Introduce experimental uncurried mode. For experimentation only. PR #5796
- Customization of runtime representation of variants and introduction of untagged variants PR #6095, PR #6103
🚀 New Feature
- Add support for uncurried mode: a mode where everything is considered uncurried, whether with or without the
.
. This can be turned on with@@uncurried
locally in a file. For project-level configuration inbsconfig.json
, there's a boolean config"uncurried"
, which propagates to dependencies, to turn on uncurried mode.
Since there's no syntax for partial application in this new mode, introduce@res.partial foo(x)
to express partial application. This is temporary and will later have some surface syntax.
Make uncurried functions a subtype of curried functions, and allow application for uncurried functions.
Themake
function of components is generated as an uncurried function.
Use best effort to determine the config when formatting a file.
#5968 #6080 #6086 #6087 - Customization of runtime representation of variants. This is work in progress. E.g. some restrictions on the input. See comments of the form "TODO: put restriction on the variant definitions allowed, to make sure this never happens". #6095
- Introduce untagged variants #6103
- Add support for unary uncurried pipe in uncurried mode #5804
- Add support for partial application of uncurried functions: with uncurried application one can provide a
subset of the arguments, and return a curried type with the remaining ones #5805 - Add support for uncurried externals #5815 #5819 #5830 #5894
- Parser/Printer: unify uncurried functions of arity 0, and of arity 1 taking unit. There's now only arity 1 in the source language. #5825
- Add support for default arguments in uncurried functions #5835
- Inline uncurried application when it is safe #5847
- Support optional named arguments without a final unit in uncurried functions #5907
- GenType: add the option to use the
@genType
annotation at the module level, meaning that all the items in the module should be exported. #6113 - GenType: add support for
@genType
annotations on module definitions. #6113 - Prebuilt binaries are now provided for all major platforms:
- macOS x64
- macOS ARM
- Linux x64 (statically linked)
- Linux ARM (statically linked)
- Windows x64
💥 Breaking Change
- Remove support for the legacy Reason syntax. Existing Reason code can be converted to ReScript syntax using ReScript 9 as follows:
npm i -g rescript@9
rescript convert <reason files>
- Remove obsolete built-in project templates and the "rescript init" functionality. This is replaced by create-rescript-app which is maintained separately.
- Do not attempt to build ReScript from source on npm postinstall for platforms without prebuilt binaries anymore.
- Made pinned dependencies transitive: if a is a pinned dependency of b and b is a pinned dependency of c, then a is implicitly a pinned dependency of c. This change is only breaking if your build process assumes non-transitivity.
- Curried after uncurried is not fused anymore:
(. x) => y => 3
is not equivalent to(. x, y) => 3
anymore. It's instead equivalent to(. x) => { y => 3 }
.
Also,(. int) => string => bool
is not equivalen to(. int, string) => bool
anymore.
These are only breaking changes for unformatted code. - Exponentiation operator
**
is now right-associative.2. ** 3. ** 2.
now compile toMath.pow(2, Math.pow(3, 2))
and not anymoreMath.pow(Math.pow(2, 3), 2)
. Parentheses can be used to change precedence. - Remove unsafe
j`$(a)$(b)`
interpolation deprecated in compiler version 10 #6068 - Remove deprecated module
Printexc
@deriving(jsConverter)
not supported anymore for variant types #6088- New representation for variants, where the tag is a string instead of a number. #6088
- GenType: removed support for
@genType.as
for records and variants which has become unnecessary. Use the language's@as
instead to channge the runtime representation without requiring any runtime conversion during FFI. #6099 #6101
🐛 Bug Fix
- Fix issue where uncurried was not supported with pipe #5803
- Fix printing of nested types in uncurried mode #5826
- Fix issue in printing uncurried callbacks #5828
- Fix formatting uncurried functions with attributes #5829
- Fix parsing/printing uncurried functions with type parameters #5849
- Fix compiler ppx issue when combining
async
and uncurried application #5856 - Fix issue where the internal representation of uncurried types would leak when a non-function is applied in a curried way #5892
- Fix some comments disappearing in array access expressions #5947
- Parser: fix location of variable when function definition
{v => ...}
is enclosed in braces #5949 - Fix issue with error messages for uncurried functions where expected and given type were swapped #5973
- Fix issue with integer overflow check #6028
- Make internal encoding of locations aware of unicode #6073
- Fix issue where
foo(x,_)
in uncurried mode would generate a curried function #6082 - Fix printing of uncurried application when the lhs is a function definition #6084
- Fix parsing uncurried type starting with path #6089
- Fix bigInt comparison #6097
- Fixed a bug where the async attribute was not preserved when using the
@this
decorator in ReScript functions. This fix allows proper handling of async functions with the@this
decorator. Issue: #6100 - Fix issue with GenType and module aliases #6112
💅 Polish
- Syntax: process uncurried types explicitly in the parser/printer #5784 #5822
- Syntax: process uncurried function declarations explicitly in the parser/printer #5794
- PPX V4: allow uncurried
make
function and treat it like a curried one #5802 #5808 #5812 - Remove processing of objects expressions, which don't exist in
.res
syntax (Pexp_object
) #5841 - Remove class type processing from compiler ppx #5842
- Remove method application via operator
##
, which does not exist in.res
syntax #5844 - Treat
@meth
annotation as making the type uncurried for backwards compatibitly with some examples #5845 - Process
@set
annotation for field update as generating an uncurried function #5846 - Treat uncurried application of primitives like curried application, which produces better output #5851
- New internal representation for uncurried functions using built-in type
function$<fun_type, arity>
this avoids having to declare all the possible arities ahead of time #5870 - PPX V3: allow uncurried
make
function and treat it like a curried one https://github.co...
10.1.4
10.1.3
🚀 New Feature
- Add experimental suppport for directives. An annotation such as
@@directive("use client;")
emitsuse client;
verbatim before imports #5999 genType
: addCore
standard library support for the following builtin types:Null.t
,Nullable.t
,Undefined.t
,Dict.t<_>
,Promise.t<_>
,Date.t
,BigInt.t
,RegExp.t
,Map.t<_, _>
,WeakMap.t<_, _>
,Set<_>
,WeakSet<_>
#6024
💥 Breaking Change
genType
: streamline the treatment of optionals as undefined #6024- Represent
option<t>
asundefined | t
instead ofnull | undefined | t
. This is more permissive when importing functions taking optional values (allows to use option types), but stricter when e.g. exporting ReScript functions taking arguments of option type. Fallback: useJs.undefined<_>
instead. - Represent
{x:option<string>}
as{x:(undefined | string)}
instead of{x?: string}
. This is more in line with TS's behaviour. Fallback: use{x?:string}
.
- Represent
💅 Polish
- Add the gap property to jsxDOMStyle #5956
🐛 Bug Fix
- Fix issue where error messages related to non-existent props were displayed without location information rescript-lang/syntax#730
- Fix issue where uncurried functions were incorrectly converting the type of a prop given as a default value to curried rescript-lang/syntax#731
- Fix issue with nested async functions, where the inner function would be emitted without
async
#5984 - Fix issue with printing async functions with locally abstract types rescript-lang/syntax#732
- Fix issue with async context and locally abstract types #5985
- Fix support for recursive components in JSX V4 rescript-lang/syntax#733
- GenType: fix issue with V3 compatibility mode (see #5990) #5992
- Fix issue with overlapping labelled argument with default value rescript-lang/syntax#734
- Fix issue with using alias and default value together rescript-lang/syntax#734
- Fix issue in
Js.Promise2
wherethen
andcatch
were returningundefined
#5996 - Fix issue in the compiler back-end where async functions passed to an
@uncurry
external would be inlined and transformed in a way that loses async #6011 - Fix location issue for the treatment of
async
functions where hovering on the body with a type error would show'a => promise<'a>
everywhere #6014 - Fix formatting of
switch
expressions that contain bracedcases
inside rescript-lang/syntax#735 - Fix formatting of props spread for multiline JSX expression rescript-lang/syntax#736
- Support
@gentype.import
as an alias to@genType.import
in the compiler #6021 - In GenType, check annotations also in module types to decide whether to produce the
.gen.tsx
file #5903 - Fix issue with JSX V4 and newtype rescript-lang/syntax#737
- Fix issue with JSX V4 when components are nested rescript-lang/syntax#738
- Fix issue where generic compare on
float
values would be different from the compare for typefloat
#6043 - Improve code generated for default arguments in JSX V4 rescript-lang/syntax#739
- Fix issue with JSX V4 props of the form
~p as module(...)
rescript-lang/syntax#739
10.1.2
🐛 Bug Fix
- Fix an issue where error messages related to duplicate props were displayed without a loc and were unclear rescript-lang/syntax#728
10.1.1
💥 Breaking Change
- Parse the attributes of labelled argument to the pattern attributes of argument instead of function. rescript-lang/syntax#722
- The prop names duplicated to keyword are not mangled automatically in JSX v4.
- Use
@as
instead
- Use
🚀 New Feature
- Add support for empty inlined record literal
{}
for inlined records where all fields are optional #5900
🐛 Bug Fix
- Prevent inlining of async functions in additional cases #5860
- Revert to ubuntu-18.04 in CI to support Linux versions with older glibc #5868
- Fix build error where aliasing arguments to
_
in the make function with JSX V4. rescript-lang/syntax#720 - Fix parsing of spread props as an expression in JSX V4 rescript-lang/syntax#721
- Fix dropping attributes from props in make function in JSX V4 rescript-lang/syntax#723
10.1.0
10.1.0-rc.5
🐛 Bug Fix
- Prevent inlining of async functions in last stage of the compiler when the functions are not exported (not in interface file or shadowed) #5790
10.1.0-rc.4
🚀 New Feature
- Support format check with
rescript format -check
. #5760
🐛 Bug Fix
- Fix issue where the last line of
rescript format --help
usage was being swallowed #5760 - Specialize the printing of the rhs of a record field assignment for optional values
{x: ? e}
rescript-lang/syntax#714
10.1.0-rc.3
🚀 New Feature
- Support the use of spread anywhere in list creation (e.g.
list{...x, 1, ...y, ...z}
). rescript-lang/syntax#692 - Add support for the argument of
@react.component
to set a props type from the outside. rescript-lang/syntax#699
🐛 Bug Fix
- Fix issue where the JSX key type is not an optional string rescript-lang/syntax#693
- Prevent inlining of async functions #5754
- Fix build error for JSX fragment without children rescript-lang/syntax#704
- Fix issue where async as an id cannot be used with application and labelled arguments rescript-lang/syntax#707
- Fix 5557: the exhaustive checking for char is incorrect during the unicode migration #5749
- Fix 5753: the comment for unicode char is inaccurate rescript-lang/syntax#709
- Treat await as almost-unary operator weaker than pipe so
await foo->bar
meansawait (foo->bar)
rescript-lang/syntax#711
💅 Polish
- Change payload of
Pconst_char
fromchar
toint
rescript-lang/syntax#709
10.1.0-rc.2
🐛 Bug Fix
- Fix issue with changes not being applied with React Native's Metro bundler for files with warnings #5738
- Fix emitting unary minus for floats in case of negative constants #5737
- Fix issue where a spread
...x
in non-last position would not be reported as syntax error rescript-lang/syntax#673 - Fix issue where the formatter would delete
async
in a function with labelled arguments. - Fix several printing issues with
async
including an infinite loop rescript-lang/syntax#680 - Fix issue where certain JSX expressions would be formatted differenctly in compiler 10.1.0-rc.1 rescript-lang/syntax#675
- Fix issue where printing nested pipe discards await rescript-lang/syntax#687