module CLISubCommand

: sig

SubCommand definition

Author Sylvain Le Gall
type cli_parsing_t = (Arg.key * Arg.spec * Arg.doc) list * 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 : Arg.anon_fun
val default_fspecs : unit -> cli_parsing_t * unit cli_parsing_post_t
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 -> string -> string -> unit run_t -> unit

register ~usage name synopsis help run Create a subcommand using provided data, see t for their meanings. See make_run to define a run function. You can also see [root: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.