This commit is contained in:
c-cube 2024-05-28 14:52:33 +00:00
parent dfa97a5ac0
commit 5c768b2107
9 changed files with 38 additions and 14 deletions

View file

@ -42,14 +42,22 @@
<span><span class="optlabel">?argv</span>:<span>string array</span> <span class="arrow">&#45;&gt;</span></span>
<span><span class="optlabel">?term_err</span>:<a href="Exit/index.html#type-code">Exit.code</a> <span class="arrow">&#45;&gt;</span></span>
<span><span><span><span>(<a href="Exit/index.html#type-code">Exit.code</a>, string)</span> <a href="../../../ocaml/Stdlib/index.html#type-result">result</a></span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span>
<a href="Exit/index.html#type-code">Exit.code</a></span></code></div><div class="spec-doc"><p><code>eval_result' cmd</code> is:</p><ul><li><code>c</code> if <code>cmd</code> evaluates to <code>Ok c</code>.</li><li><a href="Exit/index.html#val-some_error"><code>Exit.some_error</code></a> if <code>cmd</code> evaluates to <code>Error msg</code>. In this case <code>msg</code> is printed on <code>err</code>.</li></ul><p>See <a href="#val-eval_value"><code>eval_value</code></a> for other arguments.</p></div></div><h3 id="eval_low"><a href="#eval_low" class="anchor"></a>Low level evaluation</h3><p>This interface gives more information on command evaluation results and lets you choose how to map evaluation results to exit codes.</p><div class="odoc-spec"><div class="spec type anchored" id="type-eval_ok"><a href="#type-eval_ok" class="anchor"></a><code><span><span class="keyword">type</span> <span>'a eval_ok</span></span><span> = </span><span>[ </span></code><ol><li id="type-eval_ok.Ok" class="def variant constructor anchored"><a href="#type-eval_ok.Ok" class="anchor"></a><code><span>| </span><span>`Ok <span class="keyword">of</span> <span class="type-var">'a</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p>The term of the command evaluated to this value.</p><span class="comment-delim">*)</span></div></li><li id="type-eval_ok.Version" class="def variant constructor anchored"><a href="#type-eval_ok.Version" class="anchor"></a><code><span>| </span><span>`Version</span></code><div class="def-doc"><span class="comment-delim">(*</span><p>The version of the main cmd was requested.</p><span class="comment-delim">*)</span></div></li><li id="type-eval_ok.Help" class="def variant constructor anchored"><a href="#type-eval_ok.Help" class="anchor"></a><code><span>| </span><span>`Help</span></code><div class="def-doc"><span class="comment-delim">(*</span><p>Help was requested.</p><span class="comment-delim">*)</span></div></li></ol><code><span> ]</span></code></div><div class="spec-doc"><p>The type for successful evaluation results.</p></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-eval_error"><a href="#type-eval_error" class="anchor"></a><code><span><span class="keyword">type</span> eval_error</span><span> = </span><span>[ </span></code><ol><li id="type-eval_error.Parse" class="def variant constructor anchored"><a href="#type-eval_error.Parse" class="anchor"></a><code><span>| </span><span>`Parse</span></code><div class="def-doc"><span class="comment-delim">(*</span><p>A parse error occurred.</p><span class="comment-delim">*)</span></div></li><li id="type-eval_error.Term" class="def variant constructor anchored"><a href="#type-eval_error.Term" class="anchor"></a><code><span>| </span><span>`Term</span></code><div class="def-doc"><span class="comment-delim">(*</span><p>A term evaluation error occurred.</p><span class="comment-delim">*)</span></div></li><li id="type-eval_error.Exn" class="def variant constructor anchored"><a href="#type-eval_error.Exn" class="anchor"></a><code><span>| </span><span>`Exn</span></code><div class="def-doc"><span class="comment-delim">(*</span><p>An uncaught exception occurred.</p><span class="comment-delim">*)</span></div></li></ol><code><span> ]</span></code></div><div class="spec-doc"><p>The type for erroring evaluation results.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-eval_value"><a href="#val-eval_value" class="anchor"></a><code><span><span class="keyword">val</span> eval_value :
<a href="Exit/index.html#type-code">Exit.code</a></span></code></div><div class="spec-doc"><p><code>eval_result' cmd</code> is:</p><ul><li><code>c</code> if <code>cmd</code> evaluates to <code>Ok c</code>.</li><li><a href="Exit/index.html#val-some_error"><code>Exit.some_error</code></a> if <code>cmd</code> evaluates to <code>Error msg</code>. In this case <code>msg</code> is printed on <code>err</code>.</li></ul><p>See <a href="#val-eval_value"><code>eval_value</code></a> for other arguments.</p></div></div><h3 id="eval_low"><a href="#eval_low" class="anchor"></a>Low level evaluation</h3><p>This interface gives more information on command evaluation results and lets you choose how to map evaluation results to exit codes.</p><div class="odoc-spec"><div class="spec type anchored" id="type-eval_ok"><a href="#type-eval_ok" class="anchor"></a><code><span><span class="keyword">type</span> <span>'a eval_ok</span></span><span> = </span><span>[ </span></code><ol><li id="type-eval_ok.Ok" class="def variant constructor anchored"><a href="#type-eval_ok.Ok" class="anchor"></a><code><span>| </span><span>`Ok <span class="keyword">of</span> <span class="type-var">'a</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p>The term of the command evaluated to this value.</p><span class="comment-delim">*)</span></div></li><li id="type-eval_ok.Version" class="def variant constructor anchored"><a href="#type-eval_ok.Version" class="anchor"></a><code><span>| </span><span>`Version</span></code><div class="def-doc"><span class="comment-delim">(*</span><p>The version of the main cmd was requested.</p><span class="comment-delim">*)</span></div></li><li id="type-eval_ok.Help" class="def variant constructor anchored"><a href="#type-eval_ok.Help" class="anchor"></a><code><span>| </span><span>`Help</span></code><div class="def-doc"><span class="comment-delim">(*</span><p>Help was requested.</p><span class="comment-delim">*)</span></div></li></ol><code><span> ]</span></code></div><div class="spec-doc"><p>The type for successful evaluation results.</p></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-eval_error"><a href="#type-eval_error" class="anchor"></a><code><span><span class="keyword">type</span> eval_error</span><span> = </span><span>[ </span></code><ol><li id="type-eval_error.Parse" class="def variant constructor anchored"><a href="#type-eval_error.Parse" class="anchor"></a><code><span>| </span><span>`Parse</span></code><div class="def-doc"><span class="comment-delim">(*</span><p>A parse error occurred.</p><span class="comment-delim">*)</span></div></li><li id="type-eval_error.Term" class="def variant constructor anchored"><a href="#type-eval_error.Term" class="anchor"></a><code><span>| </span><span>`Term</span></code><div class="def-doc"><span class="comment-delim">(*</span><p>A term evaluation error occurred.</p><span class="comment-delim">*)</span></div></li><li id="type-eval_error.Exn" class="def variant constructor anchored"><a href="#type-eval_error.Exn" class="anchor"></a><code><span>| </span><span>`Exn</span></code><div class="def-doc"><span class="comment-delim">(*</span><p>An uncaught exception occurred.</p><span class="comment-delim">*)</span></div></li></ol><code><span> ]</span></code></div><div class="spec-doc"><p>The type for erroring evaluation results.</p></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-eval_exit"><a href="#type-eval_exit" class="anchor"></a><code><span><span class="keyword">type</span> <span>'a eval_exit</span></span><span> = </span><span>[ </span></code><ol><li id="type-eval_exit.Ok" class="def variant constructor anchored"><a href="#type-eval_exit.Ok" class="anchor"></a><code><span>| </span><span>`Ok <span class="keyword">of</span> <span class="type-var">'a</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p>The term of the command evaluated to this value.</p><span class="comment-delim">*)</span></div></li><li id="type-eval_exit.Exit" class="def variant constructor anchored"><a href="#type-eval_exit.Exit" class="anchor"></a><code><span>| </span><span>`Exit <span class="keyword">of</span> <a href="Exit/index.html#type-code">Exit.code</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p>The evaluation wants to exit with this code.</p><span class="comment-delim">*)</span></div></li></ol><code><span> ]</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-eval_value"><a href="#val-eval_value" class="anchor"></a><code><span><span class="keyword">val</span> eval_value :
<span><span class="optlabel">?help</span>:<a href="../../../ocaml/Stdlib/Format/index.html#type-formatter">Stdlib.Format.formatter</a> <span class="arrow">&#45;&gt;</span></span>
<span><span class="optlabel">?err</span>:<a href="../../../ocaml/Stdlib/Format/index.html#type-formatter">Stdlib.Format.formatter</a> <span class="arrow">&#45;&gt;</span></span>
<span><span class="optlabel">?catch</span>:bool <span class="arrow">&#45;&gt;</span></span>
<span><span class="optlabel">?env</span>:<span>(<span>string <span class="arrow">&#45;&gt;</span></span> <span>string option</span>)</span> <span class="arrow">&#45;&gt;</span></span>
<span><span class="optlabel">?argv</span>:<span>string array</span> <span class="arrow">&#45;&gt;</span></span>
<span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span>
<span><span>(<span><span class="type-var">'a</span> <a href="#type-eval_ok">eval_ok</a></span>, <a href="#type-eval_error">eval_error</a>)</span> <a href="../../../ocaml/Stdlib/index.html#type-result">result</a></span></span></code></div><div class="spec-doc"><p><code>eval ~help ~err ~catch ~env ~argv cmd</code> is the evaluation result of <code>cmd</code> with:</p><ul><li><code>argv</code> the command line arguments to parse (defaults to <code>Sys.argv</code>)</li><li><code>env</code> the function used for environment variable lookup (defaults to <code>Sys.getenv</code>).</li><li><code>catch</code> if <code>true</code> (default) uncaught exceptions are intercepted and their stack trace is written to the <code>err</code> formatter</li><li><code>help</code> is the formatter used to print help or version messages (defaults to <code>Format.std_formatter</code>)</li><li><code>err</code> is the formatter used to print error messages (defaults to <code>Format.err_formatter</code>).</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-eval_peek_opts"><a href="#val-eval_peek_opts" class="anchor"></a><code><span><span class="keyword">val</span> eval_peek_opts :
<span><span>(<span><span class="type-var">'a</span> <a href="#type-eval_ok">eval_ok</a></span>, <a href="#type-eval_error">eval_error</a>)</span> <a href="../../../ocaml/Stdlib/index.html#type-result">result</a></span></span></code></div><div class="spec-doc"><p><code>eval ~help ~err ~catch ~env ~argv cmd</code> is the evaluation result of <code>cmd</code> with:</p><ul><li><code>argv</code> the command line arguments to parse (defaults to <code>Sys.argv</code>)</li><li><code>env</code> the function used for environment variable lookup (defaults to <code>Sys.getenv</code>).</li><li><code>catch</code> if <code>true</code> (default) uncaught exceptions are intercepted and their stack trace is written to the <code>err</code> formatter</li><li><code>help</code> is the formatter used to print help or version messages (defaults to <code>Format.std_formatter</code>)</li><li><code>err</code> is the formatter used to print error messages (defaults to <code>Format.err_formatter</code>).</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-eval_value'"><a href="#val-eval_value'" class="anchor"></a><code><span><span class="keyword">val</span> eval_value' :
<span><span class="optlabel">?help</span>:<a href="../../../ocaml/Stdlib/Format/index.html#type-formatter">Stdlib.Format.formatter</a> <span class="arrow">&#45;&gt;</span></span>
<span><span class="optlabel">?err</span>:<a href="../../../ocaml/Stdlib/Format/index.html#type-formatter">Stdlib.Format.formatter</a> <span class="arrow">&#45;&gt;</span></span>
<span><span class="optlabel">?catch</span>:bool <span class="arrow">&#45;&gt;</span></span>
<span><span class="optlabel">?env</span>:<span>(<span>string <span class="arrow">&#45;&gt;</span></span> <span>string option</span>)</span> <span class="arrow">&#45;&gt;</span></span>
<span><span class="optlabel">?argv</span>:<span>string array</span> <span class="arrow">&#45;&gt;</span></span>
<span><span class="optlabel">?term_err</span>:int <span class="arrow">&#45;&gt;</span></span>
<span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span>
<span><span class="type-var">'a</span> <a href="#type-eval_exit">eval_exit</a></span></span></code></div><div class="spec-doc"><p><code>eval_value'</code> is like <a href="#val-eval_value"><code>eval_value</code></a>, but if the command term does not evaluate, returns an exit code like the <a href="#val-eval" title="eval">evaluation</a> function do (which can be <a href="Exit/index.html#val-ok"><code>Exit.ok</code></a> in case help or version was requested).</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-eval_peek_opts"><a href="#val-eval_peek_opts" class="anchor"></a><code><span><span class="keyword">val</span> eval_peek_opts :
<span><span class="optlabel">?version_opt</span>:bool <span class="arrow">&#45;&gt;</span></span>
<span><span class="optlabel">?env</span>:<span>(<span>string <span class="arrow">&#45;&gt;</span></span> <span>string option</span>)</span> <span class="arrow">&#45;&gt;</span></span>
<span><span class="optlabel">?argv</span>:<span>string array</span> <span class="arrow">&#45;&gt;</span></span>

View file

@ -0,0 +1,2 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Syntax (cmdliner.Cmdliner.Term.Syntax)</title><meta charset="utf-8"/><link rel="stylesheet" href="../../../../_odoc-theme/odoc.css"/><meta name="generator" content="odoc 2.4.2"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="../index.html">Up</a> <a href="../../../index.html">cmdliner</a> &#x00BB; <a href="../../index.html">Cmdliner</a> &#x00BB; <a href="../index.html">Term</a> &#x00BB; Syntax</nav><header class="odoc-preamble"><h1>Module <code><span>Term.Syntax</span></code></h1><p><code>let</code> operators.</p></header><div class="odoc-content"><div class="odoc-spec"><div class="spec value anchored" id="val-let+"><a href="#val-let+" class="anchor"></a><code><span><span class="keyword">val</span> let+ : <span><span><span class="type-var">'a</span> <a href="../index.html#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span>(<span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'b</span>)</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'b</span> <a href="../index.html#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>( let+ )</code> is <a href="../index.html#val-map"><code>map</code></a>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-and+"><a href="#val-and+" class="anchor"></a><code><span><span class="keyword">val</span> and+ : <span><span><span class="type-var">'a</span> <a href="../index.html#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'b</span> <a href="../index.html#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span>(<span class="type-var">'a</span> * <span class="type-var">'b</span>)</span> <a href="../index.html#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>( and* )</code> is <a href="../index.html#val-product"><code>product</code></a>.</p></div></div></div></body></html>

File diff suppressed because one or more lines are too long

View file

@ -1,3 +1,17 @@
v1.3.0 2024-05-23 La Forclaz (VS)
---------------------------------
- Add let operators in `Cmdliner.Term.Syntax` (#173). Thanks to Benoit
Montagu for suggesting, Gabriel Scherer for reminding us of language
punning obscurities and Sebastien Mondet for strengthening the case
to add them.
- Pager. Support full path command lookups on Windows.
(#185). Thanks to @kit-ty-kate for the report.
- In manpage specifications use `$(iname)` in the default
introduction of the `ENVIRONMENT` section. Follow up to
#168.
- Add `Cmd.eval_value'` a variation on `Cmd.eval_value`.
v1.2.0 2023-04-10 La Forclaz (VS)
---------------------------------

View file

@ -1,6 +1,6 @@
Cmdliner — Declarative definition of command line interfaces for OCaml
-------------------------------------------------------------------------------
v1.2.0
v1.3.0
Cmdliner allows the declarative definition of command line interfaces
for OCaml.

View file

@ -79,7 +79,7 @@ let cmd =
`S Manpage.s_bugs; `P "Report bugs to <bugs@example.org>.";
`S Manpage.s_see_also; `P "$(b,rmdir)(1), $(b,unlink)(2)" ]
in
let info = Cmd.info "rm" ~version:"v1.2.0" ~doc ~man in
let info = Cmd.info "rm" ~version:"v1.3.0" ~doc ~man in
Cmd.v info Term.(const rm $ prompt $ recursive $ files)
let main () = exit (Cmd.eval cmd)
@ -149,7 +149,7 @@ let cmd =
[ `S Manpage.s_bugs;
`P "Email them to <bugs@example.org>."; ]
in
let info = Cmd.info "cp" ~version:"v1.2.0" ~doc ~man ~man_xrefs in
let info = Cmd.info "cp" ~version:"v1.3.0" ~doc ~man ~man_xrefs in
Cmd.v info Term.(ret (const cp $ verbose $ recurse $ force $ srcs $ dest))
@ -258,7 +258,7 @@ let cmd =
`S Manpage.s_see_also;
`P "$(b,cat)(1), $(b,head)(1)" ]
in
let info = Cmd.info "tail" ~version:"v1.2.0" ~doc ~man in
let info = Cmd.info "tail" ~version:"v1.3.0" ~doc ~man in
Cmd.v info Term.(const tail $ lines $ follow $ verb $ pid $ files)
@ -435,7 +435,7 @@ let help_cmd =
let main_cmd =
let doc = "a revision control system" in
let man = help_secs in
let info = Cmd.info "darcs" ~version:"v1.2.0" ~doc ~sdocs ~man in
let info = Cmd.info "darcs" ~version:"v1.3.0" ~doc ~sdocs ~man in
let default = Term.(ret (const (fun _ -> `Help (`Pager, None)) $ copts_t)) in
Cmd.group info ~default [initialize_cmd; record_cmd; help_cmd]

View file

@ -1,4 +1,4 @@
{0 Cmdliner {%html: <span class="version">v1.2.0</span>%}}
{0 Cmdliner {%html: <span class="version">v1.3.0</span>%}}
[Cmdliner] provides a simple and compositional mechanism
to convert command line arguments to OCaml values and pass them to

View file

@ -52,7 +52,7 @@ let cmd =
`S Manpage.s_bugs; `P &quot;Report bugs to &lt;bugs@example.org&gt;.&quot;;
`S Manpage.s_see_also; `P &quot;$(b,rmdir)(1), $(b,unlink)(2)&quot; ]
in
let info = Cmd.info &quot;rm&quot; ~version:&quot;v1.2.0&quot; ~doc ~man in
let info = Cmd.info &quot;rm&quot; ~version:&quot;v1.3.0&quot; ~doc ~man in
Cmd.v info Term.(const rm $ prompt $ recursive $ files)
let main () = exit (Cmd.eval cmd)
@ -101,7 +101,7 @@ let cmd =
[ `S Manpage.s_bugs;
`P &quot;Email them to &lt;bugs@example.org&gt;.&quot;; ]
in
let info = Cmd.info &quot;cp&quot; ~version:&quot;v1.2.0&quot; ~doc ~man ~man_xrefs in
let info = Cmd.info &quot;cp&quot; ~version:&quot;v1.3.0&quot; ~doc ~man ~man_xrefs in
Cmd.v info Term.(ret (const cp $ verbose $ recurse $ force $ srcs $ dest))
@ -183,7 +183,7 @@ let cmd =
`S Manpage.s_see_also;
`P &quot;$(b,cat)(1), $(b,head)(1)&quot; ]
in
let info = Cmd.info &quot;tail&quot; ~version:&quot;v1.2.0&quot; ~doc ~man in
let info = Cmd.info &quot;tail&quot; ~version:&quot;v1.3.0&quot; ~doc ~man in
Cmd.v info Term.(const tail $ lines $ follow $ verb $ pid $ files)
@ -330,7 +330,7 @@ let help_cmd =
let main_cmd =
let doc = &quot;a revision control system&quot; in
let man = help_secs in
let info = Cmd.info &quot;darcs&quot; ~version:&quot;v1.2.0&quot; ~doc ~sdocs ~man in
let info = Cmd.info &quot;darcs&quot; ~version:&quot;v1.3.0&quot; ~doc ~sdocs ~man in
let default = Term.(ret (const (fun _ -&gt; `Help (`Pager, None)) $ copts_t)) in
Cmd.group info ~default [initialize_cmd; record_cmd; help_cmd]

View file

@ -1,6 +1,6 @@
The MIT License
Copyright (c) 2019--2023 Jane Street Group, LLC <opensource-contacts@janestreet.com>
Copyright (c) 2019--2024 Jane Street Group, LLC <opensource-contacts@janestreet.com>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal