Module Merlin_utils.Marg

Argument parsing library which fold over arguments

Specifications of arguments is split in two passes:

type 'acc t = string list -> 'acc -> string list * 'acc

Action associated to a flag updating a state of type 'acc. It takes a list of arguments and either succeeds returning untouched arguments or fails raising an exception.

type 'acc table = (string, 'acc t) Hashtbl.t

A table mapping a flag to the corresponding action

Combinators for building actions

val unit : ('acc -> 'acc) -> 'acc t

Action updating state and not consuming any argument

val param : string -> (string -> 'acc -> 'acc) -> 'acc t

Action consuming a single argument

val bool : (bool -> 'acc -> 'acc) -> 'acc t

Action consuming a boolean argument

val int : (int -> 'acc -> 'acc) -> 'acc t

Action consuming an integer argument

val unit_ignore : 'acc t

Action doing nothing

val param_ignore : 'acc t

Action doing nothing and dropping one argument

Parsing of argument lists

type docstring = string
type 'a spec = string * docstring * 'a t
val parse_one : warning:(string -> unit) -> 'global table -> 'local spec list -> string list -> 'global -> 'local -> (string list * 'global * 'local) option

Consume at most one flag from the list, returning updated state or None in case of failure. Warning function is called with an error message in case of incorrect use.

val parse_all : warning:(string -> unit) -> 'global table -> 'local spec list -> string list -> 'global -> 'local -> 'global * 'local

Consume all arguments from the input list, calling warning for incorrect ones and resuming parsing after.