diff --git a/CHANGELOG.md b/CHANGELOG.md index 8b13ac9c13..60a86d3dc8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ #### :bug: Bug Fix - Fix issue with JSX V4 when component props have the default value with same name. https://github.com/rescript-lang/rescript-compiler/pull/6377 +- Fixed printer with `"uncurried": false` in bsconfig. https://github.com/rescript-lang/rescript-compiler/pull/6378 # 11.0.0-rc.2 diff --git a/jscomp/build_tests/uncurried_printer/bsconfig.json b/jscomp/build_tests/uncurried_printer/bsconfig.json new file mode 100644 index 0000000000..ded06e80cd --- /dev/null +++ b/jscomp/build_tests/uncurried_printer/bsconfig.json @@ -0,0 +1,6 @@ +{ + "name": "uncurried_printer", + "version": "0.1.0", + "sources": ["src"], + "uncurried": false +} diff --git a/jscomp/build_tests/uncurried_printer/input.js b/jscomp/build_tests/uncurried_printer/input.js new file mode 100755 index 0000000000..e5b78de60a --- /dev/null +++ b/jscomp/build_tests/uncurried_printer/input.js @@ -0,0 +1,15 @@ +const assert = require("assert"); +const child_process = require("child_process"); +const fs = require("fs"); +const path = require("path"); + +const expectedContent = `let a = (. b) => b\n`; +const filePath = path.join(__dirname, "src", "a.res"); + +fs.writeFileSync(filePath, expectedContent, "utf-8"); + +child_process.execSync(`../../../rescript format -all`, { cwd: __dirname }); + +const content = fs.readFileSync(filePath, "utf-8"); + +assert.equal(content, expectedContent); diff --git a/jscomp/build_tests/uncurried_printer/src/a.res b/jscomp/build_tests/uncurried_printer/src/a.res new file mode 100644 index 0000000000..568bcab521 --- /dev/null +++ b/jscomp/build_tests/uncurried_printer/src/a.res @@ -0,0 +1 @@ +let a = (. b) => b diff --git a/jscomp/syntax/src/res_multi_printer.ml b/jscomp/syntax/src/res_multi_printer.ml index d419db1c8b..354311ce08 100644 --- a/jscomp/syntax/src/res_multi_printer.ml +++ b/jscomp/syntax/src/res_multi_printer.ml @@ -1,7 +1,6 @@ let defaultPrintWidth = 100 -(* Determine if the file is in uncurried mode by looking for - the fist ancestor .bsconfig and see if it contains "uncurried": false *) +(* Look at bsconfig.json to set Uncurried or Legacy mode if it contains "uncurried": false *) let getUncurriedFromBsconfig ~filename = let rec findBsconfig ~dir = let bsconfig = Filename.concat dir "bsconfig.json" in @@ -38,25 +37,26 @@ let getUncurriedFromBsconfig ~filename = | None -> () | Some bsconfig -> let lines = bsconfig |> String.split_on_char '\n' in - let uncurried = + let is_legacy_uncurried = lines |> List.exists (fun line -> - let uncurried = ref false in - let false_ = ref false in + let is_uncurried_option = ref false in + let is_option_falsy = ref false in let words = line |> String.split_on_char ' ' in words |> List.iter (fun word -> match word with - | "\"uncurried\"" | "\"uncurried\":" -> uncurried := true + | "\"uncurried\"" | "\"uncurried\":" -> + is_uncurried_option := true | "\"uncurried\":false" | "\"uncurried\":false," -> - uncurried := true; - false_ := true + is_uncurried_option := true; + is_option_falsy := true | "false" | ":false" | "false," | ":false," -> - false_ := true + is_option_falsy := true | _ -> ()); - not (!uncurried && !false_)) + !is_uncurried_option && !is_option_falsy) in - if uncurried then Config.uncurried := Uncurried + if not is_legacy_uncurried then Config.uncurried := Uncurried (* print res files to res syntax *) let printRes ~ignoreParseErrors ~isInterface ~filename =