|
2 | 2 |
|
3 | 3 | (* Example setup for a simple command line tool with colorful output. *) |
4 | 4 |
|
5 | | -let hello _ msg = |
| 5 | +let hello msg = |
6 | 6 | Logs.app (fun m -> m "%s" msg); |
7 | 7 | Logs.info (fun m -> m "End-user information."); |
8 | 8 | Logs.debug (fun m -> m "Developer information."); |
9 | 9 | Logs.err (fun m -> m "Something bad happened."); |
10 | 10 | Logs.warn (fun m -> m "Something bad may happen in the future."); |
11 | 11 | if Logs.err_count () > 0 then 1 else 0 |
12 | 12 |
|
13 | | -let setup_log style_renderer level = |
| 13 | +let setup_log ~style_renderer ~level = |
14 | 14 | Fmt_tty.setup_std_outputs ?style_renderer (); |
15 | 15 | Logs.set_level level; |
16 | 16 | Logs.set_reporter (Logs_fmt.reporter ()) |
17 | 17 |
|
18 | 18 | (* Command line interface *) |
19 | 19 |
|
20 | 20 | open Cmdliner |
| 21 | +open Cmdliner.Term.Syntax |
21 | 22 |
|
22 | | -let setup_log = |
| 23 | +let cmd = |
| 24 | + Cmd.make (Cmd.info "tool") @@ |
23 | 25 | let env = Cmd.Env.info "TOOL_VERBOSITY" in |
24 | | - Term.(const setup_log $ Fmt_cli.style_renderer () $ Logs_cli.level ~env ()) |
| 26 | + let+ style_renderer = Fmt_cli.style_renderer () |
| 27 | + and+ level = Logs_cli.level ~env () |
| 28 | + and+ msg = |
| 29 | + let doc = "The message to output." in |
| 30 | + Arg.(value & pos 0 string "Hello horrible world!" & info [] ~doc) |
| 31 | + in |
| 32 | + setup_log ~style_renderer ~level; |
| 33 | + hello msg |
25 | 34 |
|
26 | | -let msg = |
27 | | - let doc = "The message to output." in |
28 | | - Arg.(value & pos 0 string "Hello horrible world!" & info [] ~doc) |
29 | | - |
30 | | -let main () = |
31 | | - let cmd = Cmd.v (Cmd.info "tool") Term.(const hello $ setup_log $ msg) in |
32 | | - Cmd.eval' cmd |
33 | 35 |
|
| 36 | +let main () = Cmd.eval' cmd |
34 | 37 | let () = if !Sys.interactive then () else exit (main ()) |
0 commit comments