summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README.md1
-rw-r--r--lua/conform/formatters/rescript-format.lua40
2 files changed, 41 insertions, 0 deletions
diff --git a/README.md b/README.md
index cd20376..5efb108 100644
--- a/README.md
+++ b/README.md
@@ -259,6 +259,7 @@ You can view this list in vim with `:help conform-formatters`
- [pretty-php](https://github.com/lkrms/pretty-php) - The opinionated PHP code formatter.
- [puppet-lint](https://github.com/puppetlabs/puppet-lint) - Check that your Puppet manifests conform to the style guide.
- [reorder-python-imports](https://github.com/asottile/reorder-python-imports) - Rewrites source to reorder python imports
+- [rescript-format](https://github.com/rescript-lang/rescript-compiler) - The built-in ReScript formatter.
- [rubocop](https://github.com/rubocop/rubocop) - Ruby static code analyzer and formatter, based on the community Ruby style guide.
- [rubyfmt](https://github.com/fables-tales/rubyfmt) - Ruby Autoformatter! (Written in Rust)
- [ruff_fix](https://beta.ruff.rs/docs/) - An extremely fast Python linter, written in Rust. Fix lint errors.
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",
+ }),
+}