From ad85d25d57095facbc1e72d75121cb617c08aac9 Mon Sep 17 00:00:00 2001 From: Florian Hammerschmidt Date: Tue, 17 Oct 2023 22:58:44 +0200 Subject: [PATCH 1/4] Playground: auto-open @rescript/core when loaded --- src/Playground.res | 7 +++++++ src/bindings/RescriptCompilerApi.res | 4 ++++ src/bindings/RescriptCompilerApi.resi | 2 ++ 3 files changed, 13 insertions(+) diff --git a/src/Playground.res b/src/Playground.res index 24b582cfd..fccd676e1 100644 --- a/src/Playground.res +++ b/src/Playground.res @@ -902,9 +902,16 @@ module Settings = { let onResetClick = evt => { ReactEvent.Mouse.preventDefault(evt) + + let open_modules = + readyState.selected.libraries->Belt.Array.some(el => el === "@rescript/core") + ? Some(["RescriptCore"]) + : None + let defaultConfig = { Api.Config.module_system: "nodejs", warn_flags: "+a-4-9-20-40-41-42-50-61-102-109", + ?open_modules, } setConfig(defaultConfig) } diff --git a/src/bindings/RescriptCompilerApi.res b/src/bindings/RescriptCompilerApi.res index faf569599..bb742b939 100644 --- a/src/bindings/RescriptCompilerApi.res +++ b/src/bindings/RescriptCompilerApi.res @@ -348,6 +348,7 @@ module Config = { module_system: string, warn_flags: string, uncurried?: bool, + open_modules?: array, } } @@ -423,6 +424,8 @@ module Compiler = { @send external setWarnFlags: (t, string) => bool = "setWarnFlags" + @send external setOpenModules: (t, array) => bool = "setOpenModules" + let setConfig = (t: t, config: Config.t): unit => { let moduleSystem = switch config.module_system { | "nodejs" => #nodejs->Some @@ -431,6 +434,7 @@ module Compiler = { } Belt.Option.forEach(moduleSystem, moduleSystem => t->setModuleSystem(moduleSystem)->ignore) + Belt.Option.forEach(config.open_modules, modules => t->setOpenModules(modules)->ignore) t->setWarnFlags(config.warn_flags)->ignore } diff --git a/src/bindings/RescriptCompilerApi.resi b/src/bindings/RescriptCompilerApi.resi index f6742488c..d93d5bbd3 100644 --- a/src/bindings/RescriptCompilerApi.resi +++ b/src/bindings/RescriptCompilerApi.resi @@ -159,6 +159,7 @@ module Config: { warn_flags: string, /** Only available in apiVersion > 3 (= ReScript 11+) */ uncurried?: bool, + open_modules?: array, } } @@ -197,6 +198,7 @@ module Compiler: { let setModuleSystem: (t, [#es6 | #nodejs]) => bool let setWarnFlags: (t, string) => bool + let setOpenModules: (t, array) => bool let setConfig: (t, Config.t) => unit // General format function From 412f86c1947a28daaca0554a42a9f65c4b9cddef Mon Sep 17 00:00:00 2001 From: Florian Hammerschmidt Date: Tue, 31 Oct 2023 23:12:17 +0100 Subject: [PATCH 2/4] Take compiler api V4 into account --- src/bindings/RescriptCompilerApi.res | 5 ++++- src/bindings/RescriptCompilerApi.resi | 1 + src/common/CompilerManagerHook.res | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/bindings/RescriptCompilerApi.res b/src/bindings/RescriptCompilerApi.res index bb742b939..eef8c3550 100644 --- a/src/bindings/RescriptCompilerApi.res +++ b/src/bindings/RescriptCompilerApi.res @@ -36,6 +36,7 @@ module Version = { | V1 | V2 | V3 + | V4 | UnknownVersion(string) // Helps finding the right API version @@ -57,6 +58,7 @@ module Version = { } | list{"2"} => V2 | list{"3"} => V3 + | list{"4"} => V4 | _ => UnknownVersion(apiVersion) } @@ -65,6 +67,7 @@ module Version = { | V1 => "1.0" | V2 => "2.0" | V3 => "3.0" + | V4 => "4.0" | UnknownVersion(version) => version } @@ -73,7 +76,7 @@ module Version = { let availableLanguages = t => switch t { | V1 => [Lang.Reason, Res] - | V2 | V3 => [Lang.Res] + | V2 | V3 | V4 => [Lang.Res] | UnknownVersion(_) => [Res] } } diff --git a/src/bindings/RescriptCompilerApi.resi b/src/bindings/RescriptCompilerApi.resi index d93d5bbd3..cfb3065aa 100644 --- a/src/bindings/RescriptCompilerApi.resi +++ b/src/bindings/RescriptCompilerApi.resi @@ -24,6 +24,7 @@ module Version: { | V1 | V2 | V3 + | V4 | UnknownVersion(string) // Helps finding the right API version diff --git a/src/common/CompilerManagerHook.res b/src/common/CompilerManagerHook.res index 65e745f06..62225fda0 100644 --- a/src/common/CompilerManagerHook.res +++ b/src/common/CompilerManagerHook.res @@ -488,7 +488,7 @@ let useCompilerManager = ( | Lang.Reason => instance->Compiler.reasonCompile(code) | Lang.Res => instance->Compiler.resCompile(code) } - | V2 | V3 => + | V2 | V3 | V4 => switch lang { | Lang.OCaml => instance->Compiler.ocamlCompile(code) | Lang.Reason => From b268ff4f92b9edc46bce02e0d43b6c71608c4af6 Mon Sep 17 00:00:00 2001 From: Florian Hammerschmidt Date: Wed, 1 Nov 2023 00:12:31 +0100 Subject: [PATCH 3/4] Actually set open_modules in compiler config --- src/common/CompilerManagerHook.res | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/common/CompilerManagerHook.res b/src/common/CompilerManagerHook.res index 62225fda0..ae540b3b3 100644 --- a/src/common/CompilerManagerHook.res +++ b/src/common/CompilerManagerHook.res @@ -453,7 +453,14 @@ let useCompilerManager = ( let instance = Compiler.make() let apiVersion = apiVersion->Version.fromString - let config = instance->Compiler.getConfig + + let open_modules = + libraries->Belt.Array.some(el => el === "@rescript/core") + ? Some(["RescriptCore"]) + : None + + let config = {...instance->Compiler.getConfig, ?open_modules} + instance->Compiler.setConfig(config) let selected = { id: version, From 931b9f50af556ba177d6c2c90712186fd0ffe34b Mon Sep 17 00:00:00 2001 From: Florian Hammerschmidt Date: Wed, 1 Nov 2023 09:59:11 +0100 Subject: [PATCH 4/4] Guard open modules with api version >= 4 --- src/Playground.res | 5 ++++- src/common/CompilerManagerHook.res | 14 +++++++++----- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/Playground.res b/src/Playground.res index fccd676e1..4ae260543 100644 --- a/src/Playground.res +++ b/src/Playground.res @@ -903,10 +903,13 @@ module Settings = { let onResetClick = evt => { ReactEvent.Mouse.preventDefault(evt) - let open_modules = + let open_modules = switch readyState.selected.apiVersion { + | V1 | V2 | V3 | UnknownVersion(_) => None + | V4 => readyState.selected.libraries->Belt.Array.some(el => el === "@rescript/core") ? Some(["RescriptCore"]) : None + } let defaultConfig = { Api.Config.module_system: "nodejs", diff --git a/src/common/CompilerManagerHook.res b/src/common/CompilerManagerHook.res index ae540b3b3..fb50d3cbd 100644 --- a/src/common/CompilerManagerHook.res +++ b/src/common/CompilerManagerHook.res @@ -145,6 +145,12 @@ let getLibrariesForVersion = (~version: Semver.t): array => { libraries } +let getOpenModules = (~apiVersion: Version.t, ~libraries: array): option> => + switch apiVersion { + | V1 | V2 | V3 | UnknownVersion(_) => None + | V4 => libraries->Belt.Array.some(el => el === "@rescript/core") ? Some(["RescriptCore"]) : None + } + /* This function loads the compiler, plus a defined set of libraries that are available on our bs-platform-js-releases channel. @@ -396,6 +402,7 @@ let useCompilerManager = ( | Ok() => let instance = Compiler.make() let apiVersion = apiVersion->Version.fromString + let open_modules = getOpenModules(~apiVersion, ~libraries) // Note: The compiler bundle currently defaults to // commonjs when initiating the compiler, but our playground @@ -405,6 +412,7 @@ let useCompilerManager = ( let config = { ...instance->Compiler.getConfig, module_system: "es6", + ?open_modules, } instance->Compiler.setConfig(config) @@ -453,11 +461,7 @@ let useCompilerManager = ( let instance = Compiler.make() let apiVersion = apiVersion->Version.fromString - - let open_modules = - libraries->Belt.Array.some(el => el === "@rescript/core") - ? Some(["RescriptCore"]) - : None + let open_modules = getOpenModules(~apiVersion, ~libraries) let config = {...instance->Compiler.getConfig, ?open_modules} instance->Compiler.setConfig(config)