rescript-lang / rescript-compiler

The compiler for ReScript.
https://rescript-lang.org
Other
6.65k stars 442 forks source link

Compiler should not rely on `Js` or `Belt` module being present #6836

Open cknitt opened 2 months ago

cknitt commented 2 months ago

This is in preparation for switching to the Core standard library.

Currently, the compiler relies on the presence of the Js and Belt modules for quite a few things, for example async/await (Js.Promise.unsafe_async/Js.Promise.unsafe_await) or array/list spread (Belt.List.concatMany/Belt.Array.concatMany).

You can find more such usages by searching for Lident "Js" or Lident "Belt" in the compiler sources.

This should be refactored so that functions from the runtime modules (caml_*) are used instead.

cknitt commented 2 months ago

This also applies to type definitions. Js.Re.t is used somewhere, and the JSX PPX is using Js.Nullable.t.

So maybe there should also be a caml_types.res as a source for the type definitions used by Core, Js, Belt, etc.

cknitt commented 2 months ago

The runtime modules are listed in this file BTW:

jscomp/ext/js_runtime_modules.ml

zth commented 1 week ago

This fixes arrays spreads to not rely on Belt: https://github.com/rescript-lang/rescript-compiler/pull/7034