aboutsummaryrefslogtreecommitdiffstats
path: root/lua/conform/formatters
diff options
context:
space:
mode:
Diffstat (limited to 'lua/conform/formatters')
-rw-r--r--lua/conform/formatters/rescript-format.lua40
1 files changed, 40 insertions, 0 deletions
diff --git a/lua/conform/formatters/rescript-format.lua b/lua/conform/formatters/rescript-format.lua
new file mode 100644
index 0000000..806b380
--- /dev/null
+++ b/lua/conform/formatters/rescript-format.lua
@@ -0,0 +1,40 @@
+-- The formatter expects one of [.res | .resi | .ml | .mli] passed as
+-- the value to the '-stdin' argument.
+local valid_extensions = {
+ res = true,
+ resi = true,
+ ml = true,
+ mli = true,
+}
+
+local default_extension = "res"
+
+---@type conform.FileFormatterConfig
+return {
+ meta = {
+ url = "https://rescript-lang.org/",
+ description = "The built-in ReScript formatter.",
+ },
+ command = "rescript",
+ args = function(self, ctx)
+ local extension = vim.fn.fnamemodify(ctx.filename, ":e")
+
+ local is_invalid_extension = valid_extensions[extension] == nil
+ if is_invalid_extension then
+ extension = default_extension
+ end
+
+ return {
+ "format",
+ "-stdin",
+ "." .. extension,
+ }
+ end,
+ stdin = true,
+
+ require_cwd = true,
+ cwd = require("conform.util").root_file({
+ "rescript.json",
+ "bsconfig.json",
+ }),
+}