# Module CLISubCommand

    module CLISubCommand: sig .. end

SubCommand definition

- Author(s): Sylvain Le Gall

    type cli_parsing_t = (Stdlib.Arg.key * Stdlib.Arg.spec * Stdlib.Arg.doc) list *
           Stdlib.Arg.anon_fun

Define the command line arguments required for a subcommand.

    type 'a cli_parsing_post_t = unit -> 'a

Function to run after parsing command line arguments.

    type 'a main_t = ctxt:OASISContext.t -> 'a

The main function to run the subcommand.

    type 'a run_t = unit -> cli_parsing_t * 'a main_t

Generate command line arguments and the function to run the main of the subcommand.

    type t = {

`` | `scmd_name : `OASISTypes.name`;` | `(*` | Name of the subcommand, used to call it | `*)`
`` | `scmd_synopsis : `string`;` | `(*` | Short description of the subcommnad, displayed when doing a summary of the available subcommands | `*)`
`` | `scmd_help : `string`;` | `(*` | Long description of the subcommand, displayed when showing help of the subcommand. It can contains variable substitution as defined in `Buffer.add_substitute`. | `*)`
`` | `scmd_usage : `string`;` | `(*` | `Arg` usage text | `*)`
`` | `scmd_deprecated : `bool`;` | `(*` | Is this subcommand deprecated. | `*)`
`` | `scmd_run : `unit run_t`;` | `(*` | Generate the specs and a main function. | `*)`

`}`

    val default_anon : Stdlib.Arg.anon_fun

    val default_fspecs : unit -> cli_parsing_t * unit cli_parsing_post_t

Produces an empty list of specs. See also `OASISContext.fspecs`

    val make_run : (unit -> cli_parsing_t * 'a cli_parsing_post_t) ->
           ('a -> 'b) main_t -> 'b run_t

`make_run fspecs main` Create a `run_t` by combining argument parsing with the main function. The goal is to make `main` not use global variable and create what is need to store them in fspecs. This allow to make the whole subcommand invocation thread safe.

    val register : ?usage:string ->
           ?deprecated:bool ->
           OASISTypes.name ->
           synopsis:string -> help:string -> unit run_t -> unit

`register ~usage name synopsis help run` Create a subcommand using provided data, see `CLISubCommand.t` for their meanings. See `CLISubCommand.make_run` to define a run function. You can also see `CLICommon` for useful functions to wrap your `run`.

    val find : OASISTypes.name -> t

Find a subcommand.

    val list_plugin : ?deprecated:bool -> unit -> PluginLoader.entry list

List all PluginLoader entries registered. Set `deprecated` to false to filter out deprecated plugin

    val list_builtin : ?deprecated:bool -> unit -> t list

List all builtin plugin registered. Set `deprecated` to false to filter out deprecated builtin.