This commit is contained in:
swrup 2025-11-11 02:07:51 +01:00
parent aa2ff7b2f0
commit 2f3113f55d
11742 changed files with 1223940 additions and 0 deletions

View file

@ -0,0 +1,67 @@
open Import
let doc = "Format source code."
let man =
[ `S "DESCRIPTION"
; `P
{|$(b,dune fmt) runs the formatter on the source code. The formatter is
automatically selected. ocamlformat is used to format OCaml source code
( *.ml and *.mli files) and refmt is used to format Reason source code
( *.re and *.rei files).|}
; `Blocks Common.help_secs
]
;;
let lock_ocamlformat () =
if Lazy.force Lock_dev_tool.is_enabled
then
(* Note that generating the ocamlformat lockdir here means
that it will be created when a user runs `dune fmt` but not
when a user runs `dune build @fmt`. It's important that
this logic remain outside of `dune build`, as `dune
build` is intended to only build targets, and generating
a lockdir is not building a target. *)
Lock_dev_tool.lock_dev_tool Ocamlformat |> Memo.run
else Fiber.return ()
;;
let run_fmt_command ~(common : Common.t) ~config =
let open Fiber.O in
let once () =
let* () = lock_ocamlformat () in
let request (setup : Import.Main.build_system) =
let dir = Path.(relative root) (Common.prefix_target common ".") in
Alias.in_dir ~name:Dune_rules.Alias.fmt ~recursive:true ~contexts:setup.contexts dir
|> Alias.request
in
Build.run_build_system ~common ~request
>>| function
| Ok () -> ()
| Error `Already_reported -> raise Dune_util.Report_error.Already_reported
in
Scheduler.go_with_rpc_server ~common ~config once
;;
let command =
let term =
let+ builder = Common.Builder.term
and+ no_promote =
Arg.(
value
& flag
& info
[ "preview" ]
~doc:
"Just print the changes that would be made without actually applying them. \
This takes precedence over auto-promote as that flag is assumed for this \
command.")
in
let builder =
Common.Builder.set_promote builder (if no_promote then Never else Automatically)
in
let common, config = Common.init builder in
run_fmt_command ~common ~config
in
Cmd.v (Cmd.info "fmt" ~doc ~man ~envs:Common.envs) term
;;