package reason
Reason: Syntax & Toolchain for OCaml
Install
Dune Dependency
Authors
Maintainers
Sources
reason-3.16.0.tbz
sha256=47b0e43a7d348e2a850658ab4bec5a4fbbb9fd4ff3ec8a1c1816511558c5364e
sha512=0d8dbe33ac17b765ea018522910a333831fec278ae4da25ba039ce4d2d8152f9b2fbba5b40c453241bf4323e55e0dc070170b04caa35742c6e33a7f726feafb3
doc/src/reason.cmdliner/cmdliner_arg.ml.html
Source file cmdliner_arg.ml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361
(*--------------------------------------------------------------------------- Copyright (c) 2011 The cmdliner programmers. All rights reserved. SPDX-License-Identifier: ISC ---------------------------------------------------------------------------*) let rev_compare n0 n1 = compare n1 n0 (* Invalid_argument strings **) let err_not_opt = "Option argument without name" let err_not_pos = "Positional argument with a name" (* Documentation formatting helpers *) let strf = Printf.sprintf let doc_quote = Cmdliner_base.quote let doc_alts = Cmdliner_base.alts_str let doc_alts_enum ?quoted enum = doc_alts ?quoted (List.map fst enum) let str_of_pp pp v = pp Format.str_formatter v; Format.flush_str_formatter () (* Argument converters *) type 'a parser = string -> [ `Ok of 'a | `Error of string ] type 'a printer = Format.formatter -> 'a -> unit type 'a conv = 'a parser * 'a printer type 'a converter = 'a conv let default_docv = "VALUE" let conv ?docv (parse, print) = let parse s = match parse s with Ok v -> `Ok v | Error (`Msg e) -> `Error e in parse, print let conv' ?docv (parse, print) = let parse s = match parse s with Ok v -> `Ok v | Error e -> `Error e in parse, print let pconv ?docv conv = conv let conv_parser (parse, _) = fun s -> match parse s with `Ok v -> Ok v | `Error e -> Error (`Msg e) let conv_printer (_, print) = print let conv_docv _ = default_docv let err_invalid s kind = `Msg (strf "invalid value '%s', expected %s" s kind) let parser_of_kind_of_string ~kind k_of_string = fun s -> match k_of_string s with | None -> Error (err_invalid s kind) | Some v -> Ok v let some = Cmdliner_base.some let some' = Cmdliner_base.some' (* Argument information *) type env = Cmdliner_info.Env.info let env_var = Cmdliner_info.Env.info type 'a t = 'a Cmdliner_term.t type info = Cmdliner_info.Arg.t let info = Cmdliner_info.Arg.v (* Arguments *) let ( & ) f x = f x let err e = Error (`Parse e) let parse_to_list parser s = match parser s with | `Ok v -> `Ok [v] | `Error _ as e -> e let report_deprecated_env ei e = match Cmdliner_info.Env.info_deprecated e with | None -> () | Some msg -> let var = Cmdliner_info.Env.info_var e in let msg = String.concat "" ["environment variable "; var; ": "; msg ] in let err_fmt = Cmdliner_info.Eval.err_ppf ei in Cmdliner_msg.pp_err err_fmt ei ~err:msg let try_env ei a parse ~absent = match Cmdliner_info.Arg.env a with | None -> Ok absent | Some env -> let var = Cmdliner_info.Env.info_var env in match Cmdliner_info.Eval.env_var ei var with | None -> Ok absent | Some v -> match parse v with | `Error e -> err (Cmdliner_msg.err_env_parse env ~err:e) | `Ok v -> report_deprecated_env ei env; Ok v let arg_to_args = Cmdliner_info.Arg.Set.singleton let list_to_args f l = let add acc v = Cmdliner_info.Arg.Set.add (f v) acc in List.fold_left add Cmdliner_info.Arg.Set.empty l let flag a = if Cmdliner_info.Arg.is_pos a then invalid_arg err_not_opt else let convert ei cl = match Cmdliner_cline.opt_arg cl a with | [] -> try_env ei a Cmdliner_base.env_bool_parse ~absent:false | [_, _, None] -> Ok true | [_, f, Some v] -> err (Cmdliner_msg.err_flag_value f v) | (_, f, _) :: (_ ,g, _) :: _ -> err (Cmdliner_msg.err_opt_repeated f g) in arg_to_args a, convert let flag_all a = if Cmdliner_info.Arg.is_pos a then invalid_arg err_not_opt else let a = Cmdliner_info.Arg.make_all_opts a in let convert ei cl = match Cmdliner_cline.opt_arg cl a with | [] -> try_env ei a (parse_to_list Cmdliner_base.env_bool_parse) ~absent:[] | l -> try let truth (_, f, v) = match v with | None -> true | Some v -> failwith (Cmdliner_msg.err_flag_value f v) in Ok (List.rev_map truth l) with Failure e -> err e in arg_to_args a, convert let vflag v l = let convert _ cl = let rec aux fv = function | (v, a) :: rest -> begin match Cmdliner_cline.opt_arg cl a with | [] -> aux fv rest | [_, f, None] -> begin match fv with | None -> aux (Some (f, v)) rest | Some (g, _) -> failwith (Cmdliner_msg.err_opt_repeated g f) end | [_, f, Some v] -> failwith (Cmdliner_msg.err_flag_value f v) | (_, f, _) :: (_, g, _) :: _ -> failwith (Cmdliner_msg.err_opt_repeated g f) end | [] -> match fv with None -> v | Some (_, v) -> v in try Ok (aux None l) with Failure e -> err e in let flag (_, a) = if Cmdliner_info.Arg.is_pos a then invalid_arg err_not_opt else a in list_to_args flag l, convert let vflag_all v l = let convert _ cl = let rec aux acc = function | (fv, a) :: rest -> begin match Cmdliner_cline.opt_arg cl a with | [] -> aux acc rest | l -> let fval (k, f, v) = match v with | None -> (k, fv) | Some v -> failwith (Cmdliner_msg.err_flag_value f v) in aux (List.rev_append (List.rev_map fval l) acc) rest end | [] -> if acc = [] then v else List.rev_map snd (List.sort rev_compare acc) in try Ok (aux [] l) with Failure e -> err e in let flag (_, a) = if Cmdliner_info.Arg.is_pos a then invalid_arg err_not_opt else Cmdliner_info.Arg.make_all_opts a in list_to_args flag l, convert let parse_opt_value parse f v = match parse v with | `Ok v -> v | `Error err -> failwith (Cmdliner_msg.err_opt_parse f ~err) let opt ?vopt (parse, print) v a = if Cmdliner_info.Arg.is_pos a then invalid_arg err_not_opt else let absent = match Cmdliner_info.Arg.absent a with | Cmdliner_info.Arg.Doc d as a when d <> "" -> a | _ -> Cmdliner_info.Arg.Val (lazy (str_of_pp print v)) in let kind = match vopt with | None -> Cmdliner_info.Arg.Opt | Some dv -> Cmdliner_info.Arg.Opt_vopt (str_of_pp print dv) in let a = Cmdliner_info.Arg.make_opt ~absent ~kind a in let convert ei cl = match Cmdliner_cline.opt_arg cl a with | [] -> try_env ei a parse ~absent:v | [_, f, Some v] -> (try Ok (parse_opt_value parse f v) with Failure e -> err e) | [_, f, None] -> begin match vopt with | None -> err (Cmdliner_msg.err_opt_value_missing f) | Some optv -> Ok optv end | (_, f, _) :: (_, g, _) :: _ -> err (Cmdliner_msg.err_opt_repeated g f) in arg_to_args a, convert let opt_all ?vopt (parse, print) v a = if Cmdliner_info.Arg.is_pos a then invalid_arg err_not_opt else let absent = match Cmdliner_info.Arg.absent a with | Cmdliner_info.Arg.Doc d as a when d <> "" -> a | _ -> Cmdliner_info.Arg.Val (lazy "") in let kind = match vopt with | None -> Cmdliner_info.Arg.Opt | Some dv -> Cmdliner_info.Arg.Opt_vopt (str_of_pp print dv) in let a = Cmdliner_info.Arg.make_opt_all ~absent ~kind a in let convert ei cl = match Cmdliner_cline.opt_arg cl a with | [] -> try_env ei a (parse_to_list parse) ~absent:v | l -> let parse (k, f, v) = match v with | Some v -> (k, parse_opt_value parse f v) | None -> match vopt with | None -> failwith (Cmdliner_msg.err_opt_value_missing f) | Some dv -> (k, dv) in try Ok (List.rev_map snd (List.sort rev_compare (List.rev_map parse l))) with | Failure e -> err e in arg_to_args a, convert (* Positional arguments *) let parse_pos_value parse a v = match parse v with | `Ok v -> v | `Error err -> failwith (Cmdliner_msg.err_pos_parse a ~err) let pos ?(rev = false) k (parse, print) v a = if Cmdliner_info.Arg.is_opt a then invalid_arg err_not_pos else let absent = match Cmdliner_info.Arg.absent a with | Cmdliner_info.Arg.Doc d as a when d <> "" -> a | _ -> Cmdliner_info.Arg.Val (lazy (str_of_pp print v)) in let pos = Cmdliner_info.Arg.pos ~rev ~start:k ~len:(Some 1) in let a = Cmdliner_info.Arg.make_pos_abs ~absent ~pos a in let convert ei cl = match Cmdliner_cline.pos_arg cl a with | [] -> try_env ei a parse ~absent:v | [v] -> (try Ok (parse_pos_value parse a v) with Failure e -> err e) | _ -> assert false in arg_to_args a, convert let pos_list pos (parse, _) v a = if Cmdliner_info.Arg.is_opt a then invalid_arg err_not_pos else let a = Cmdliner_info.Arg.make_pos ~pos a in let convert ei cl = match Cmdliner_cline.pos_arg cl a with | [] -> try_env ei a (parse_to_list parse) ~absent:v | l -> try Ok (List.rev (List.rev_map (parse_pos_value parse a) l)) with | Failure e -> err e in arg_to_args a, convert let all = Cmdliner_info.Arg.pos ~rev:false ~start:0 ~len:None let pos_all c v a = pos_list all c v a let pos_left ?(rev = false) k = let start = if rev then k + 1 else 0 in let len = if rev then None else Some k in pos_list (Cmdliner_info.Arg.pos ~rev ~start ~len) let pos_right ?(rev = false) k = let start = if rev then 0 else k + 1 in let len = if rev then Some k else None in pos_list (Cmdliner_info.Arg.pos ~rev ~start ~len) (* Arguments as terms *) let absent_error args = let make_req a acc = let req_a = Cmdliner_info.Arg.make_req a in Cmdliner_info.Arg.Set.add req_a acc in Cmdliner_info.Arg.Set.fold make_req args Cmdliner_info.Arg.Set.empty let value a = a let err_arg_missing args = err @@ Cmdliner_msg.err_arg_missing (Cmdliner_info.Arg.Set.choose args) let required (args, convert) = let args = absent_error args in let convert ei cl = match convert ei cl with | Ok (Some v) -> Ok v | Ok None -> err_arg_missing args | Error _ as e -> e in args, convert let non_empty (al, convert) = let args = absent_error al in let convert ei cl = match convert ei cl with | Ok [] -> err_arg_missing args | Ok l -> Ok l | Error _ as e -> e in args, convert let last (args, convert) = let convert ei cl = match convert ei cl with | Ok [] -> err_arg_missing args | Ok l -> Ok (List.hd (List.rev l)) | Error _ as e -> e in args, convert (* Predefined arguments *) let man_fmts = ["auto", `Auto; "pager", `Pager; "groff", `Groff; "plain", `Plain] let man_fmt_docv = "FMT" let man_fmts_enum = Cmdliner_base.enum man_fmts let man_fmts_alts = doc_alts_enum man_fmts let man_fmts_doc kind = strf "Show %s in format $(docv). The value $(docv) must be %s. \ With $(b,auto), the format is $(b,pager) or $(b,plain) whenever \ the $(b,TERM) env var is $(b,dumb) or undefined." kind man_fmts_alts let man_format = let doc = man_fmts_doc "output" in let docv = man_fmt_docv in value & opt man_fmts_enum `Pager & info ["man-format"] ~docv ~doc let stdopt_version ~docs = value & flag & info ["version"] ~docs ~doc:"Show version information." let stdopt_help ~docs = let doc = man_fmts_doc "this help" in let docv = man_fmt_docv in value & opt ~vopt:(Some `Auto) (some man_fmts_enum) None & info ["help"] ~docv ~docs ~doc (* Predefined converters. *) let bool = Cmdliner_base.bool let char = Cmdliner_base.char let int = Cmdliner_base.int let nativeint = Cmdliner_base.nativeint let int32 = Cmdliner_base.int32 let int64 = Cmdliner_base.int64 let float = Cmdliner_base.float let string = Cmdliner_base.string let enum = Cmdliner_base.enum let file = Cmdliner_base.file let dir = Cmdliner_base.dir let non_dir_file = Cmdliner_base.non_dir_file let list = Cmdliner_base.list let array = Cmdliner_base.array let pair = Cmdliner_base.pair let t2 = Cmdliner_base.t2 let t3 = Cmdliner_base.t3 let t4 = Cmdliner_base.t4
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>