linol/cmdliner/Cmdliner/Term/index.html
2025-11-26 00:50:10 +00:00

2 lines
14 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Term (cmdliner.Cmdliner.Term)</title><meta charset="utf-8"/><link rel="stylesheet" href="../../../_odoc-theme/odoc.css"/><meta name="generator" content="odoc 3.1.0"/><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">Index</a> &#x00BB; <a href="../../index.html">cmdliner</a> &#x00BB; <a href="../index.html">Cmdliner</a> &#x00BB; Term</nav><header class="odoc-preamble"><h1>Module <code><span>Cmdliner.Term</span></code></h1><p>Terms.</p><p>A term made of terms referring to <a href="../Arg/index.html#argterms" title="argterms">command line arguments</a> implicitly defines a command line syntax fragment. Terms are associated to command values <a href="../Cmd/index.html#type-t"><code>Cmd.t</code></a> which are <a href="../Cmd/index.html#eval" title="eval">evaluated</a> to eventually produce an <a href="../Cmd/Exit/index.html#type-code" title="Cmd.Exit.code">exit code</a>.</p><p>Nowadays terms are best defined using the <a href="Syntax/index.html"><code>Cmdliner.Term.Syntax</code></a>. See examples in the <a href="../../cookbook.html#blueprints" title="blueprints">blueprints</a>.</p></header><div class="odoc-tocs"><nav class="odoc-toc odoc-local-toc"><ul><li><a href="#terms">Terms</a></li><li><a href="#interacting-with--evaluation">Interacting with <code>Cmd.t</code> evaluation</a></li></ul></nav></div><div class="odoc-content"><h2 id="terms"><a href="#terms" class="anchor"></a>Terms</h2><div class="odoc-spec"><div class="spec type anchored" id="type-t"><a href="#type-t" class="anchor"></a><code><span><span class="keyword">type</span> <span>+'a t</span></span></code></div><div class="spec-doc"><p>The type for terms evaluating to values of type <code>'a</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-const"><a href="#val-const" class="anchor"></a><code><span><span class="keyword">val</span> const : <span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>const v</code> is a term that evaluates to <code>v</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-app"><a href="#val-app" class="anchor"></a><code><span><span class="keyword">val</span> app : <span><span><span>(<span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'b</span>)</span> <a href="#type-t">t</a></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 class="type-var">'b</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>app f v</code> is a term that evaluates to the result applying the evaluation of <code>v</code> to the one of <code>f</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-map"><a href="#val-map" class="anchor"></a><code><span><span class="keyword">val</span> map : <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><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">'b</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>map f t</code> is <code>app (const f) t</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-product"><a href="#val-product" class="anchor"></a><code><span><span class="keyword">val</span> product : <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 class="type-var">'b</span> <a href="#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="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>product t0 t1</code> is <code>app (app (map (fun x y -&gt; (x, y)) t0) t1)</code></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-($)"><a href="#val-($)" class="anchor"></a><code><span><span class="keyword">val</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> <a href="#type-t">t</a></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 class="type-var">'b</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>f $ v</code> is <a href="#val-app"><code>app</code></a><code> f v</code>.</p></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-Syntax"><a href="#module-Syntax" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Syntax/index.html">Syntax</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div><div class="spec-doc"><p><code>let</code> operators.</p></div></div><h2 id="interacting-with--evaluation"><a href="#interacting-with--evaluation" class="anchor"></a>Interacting with <a href="../Cmd/index.html#type-t"><code>Cmd.t</code></a> evaluation</h2><p>These special terms allow to interact with the <a href="../Cmd/index.html#eval_low" title="eval_low">low-level evaluation process</a> performed on commands.</p><div class="odoc-spec"><div class="spec value anchored" id="val-term_result"><a href="#val-term_result" class="anchor"></a><code><span><span class="keyword">val</span> term_result : <span><span class="optlabel">?usage</span>:bool <span class="arrow">&#45;&gt;</span></span> <span><span><span><span>(<span class="type-var">'a</span>, <span>[ <span>`Msg of string</span> ]</span>)</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> <span><span class="type-var">'a</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>term_result</code> is such that:</p><ul><li><code>term_result ~usage (Ok v)</code> <a href="../Cmd/index.html#val-eval_value" title="Cmd.eval_value">evaluates</a> to <code>Ok (`Ok v)</code>.</li><li><code>term_result ~usage (Error (`Msg e))</code> <a href="../Cmd/index.html#val-eval_value" title="Cmd.eval_value">evaluates</a> to <code>Error `Term</code> with the error message <code>e</code> and usage shown according to <code>usage</code> (defaults to <code>false</code>)</li></ul><p>See also <a href="#val-term_result'"><code>term_result'</code></a>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-term_result'"><a href="#val-term_result'" class="anchor"></a><code><span><span class="keyword">val</span> term_result' : <span><span class="optlabel">?usage</span>:bool <span class="arrow">&#45;&gt;</span></span> <span><span><span><span>(<span class="type-var">'a</span>, 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> <span><span class="type-var">'a</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>term_result'</code> is like <a href="#val-term_result"><code>term_result</code></a> but with a <code>string</code> error case.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-cli_parse_result"><a href="#val-cli_parse_result" class="anchor"></a><code><span><span class="keyword">val</span> cli_parse_result : <span><span><span><span>(<span class="type-var">'a</span>, <span>[ <span>`Msg of string</span> ]</span>)</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> <span><span class="type-var">'a</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>cli_parse_result</code> is such that:</p><ul><li><code>cli_parse_result (Ok v)</code> <a href="../Cmd/index.html#val-eval_value" title="Cmd.eval_value">evaluates</a> <code>Ok (`Ok v)).} {- [cli_parse_result (Error (`Msg e))]</code> <a href="../Cmd/index.html#val-eval_value" title="Cmd.eval_value">evaluates</a> <code>Error `Parse</code>.</li></ul><p>See also <a href="#val-cli_parse_result'"><code>cli_parse_result'</code></a>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-cli_parse_result'"><a href="#val-cli_parse_result'" class="anchor"></a><code><span><span class="keyword">val</span> cli_parse_result' : <span><span><span><span>(<span class="type-var">'a</span>, 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> <span><span class="type-var">'a</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>cli_parse_result'</code> is like <a href="#val-cli_parse_result"><code>cli_parse_result</code></a> but with a <code>string</code> error case.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-main_name"><a href="#val-main_name" class="anchor"></a><code><span><span class="keyword">val</span> main_name : <span>string <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>main_name</code> is a term that evaluates to the main command name; that is the name of the tool.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-choice_names"><a href="#val-choice_names" class="anchor"></a><code><span><span class="keyword">val</span> choice_names : <span><span>string list</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>choice_names</code> is a term that evaluates to the names of the commands that are children of the main command.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-with_used_args"><a href="#val-with_used_args" class="anchor"></a><code><span><span class="keyword">val</span> with_used_args : <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 class="type-var">'a</span> * <span>string list</span>)</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>with_used_args t</code> is a term that evaluates to <code>t</code> tupled with the arguments from the command line that where used to evaluate <code>t</code>.</p></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-ret"><a href="#type-ret" class="anchor"></a><code><span><span class="keyword">type</span> <span>'a ret</span></span><span> = </span><span>[ </span></code><ol><li id="type-ret.Help" class="def variant constructor anchored"><a href="#type-ret.Help" class="anchor"></a><code><span>| </span><span>`Help <span class="keyword">of</span> <a href="../Manpage/index.html#type-format">Manpage.format</a> * <span>string option</span></span></code></li><li id="type-ret.Error" class="def variant constructor anchored"><a href="#type-ret.Error" class="anchor"></a><code><span>| </span><span>`Error <span class="keyword">of</span> bool * string</span></code></li><li id="type-ret.Ok" class="def variant constructor anchored"><a href="#type-ret.Ok" class="anchor"></a><code><span>| </span><span>`Ok <span class="keyword">of</span> <span class="type-var">'a</span></span></code></li></ol><code><span> ]</span></code></div><div class="spec-doc"><p>The type for command return values. See <a href="#val-ret"><code>ret</code></a>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-ret"><a href="#val-ret" class="anchor"></a><code><span><span class="keyword">val</span> ret : <span><span><span><span class="type-var">'a</span> <a href="#type-ret">ret</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-t">t</a></span></span></code></div><div class="spec-doc"><p><code>ret v</code> is a term whose evaluation depends on the case to which <code>v</code> evaluates. With :</p><ul><li><code>`Ok v</code>, it evaluates to <code>v</code>.</li><li><code>`Error (usage, e)</code>, the evaluation fails and <code>Cmdliner</code> prints the error <code>e</code> and the term's usage if <code>usage</code> is <code>true</code>.</li><li><code>`Help (format, name)</code>, the evaluation fails and <code>Cmdliner</code> prints a manpage in format <code>format</code>. If <code>name</code> is <code>None</code> this is the the main command's manpage. If <code>name</code> is <code>Some c</code> this is the man page of the subcommand <code>c</code> of the main command.</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-env"><a href="#val-env" class="anchor"></a><code><span><span class="keyword">val</span> env : <span><span>(<span>string <span class="arrow">&#45;&gt;</span></span> <span>string option</span>)</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>env</code> is the <code>env</code> argument given to <a href="../Cmd/index.html#eval" title="eval">command evaluation functions</a>. If you need to refine the environment lookup done by Cmdliner's machinery you should use this rather than direct calls to <code>Sys.getenv_opt</code>.</p></div></div></div></body></html>