123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106(*---------------------------------------------------------------------------
Copyright (c) 2011 The cmdliner programmers. All rights reserved.
SPDX-License-Identifier: ISC
---------------------------------------------------------------------------*)letstrf=Printf.sprintfletquote=Cmdliner_base.quoteletpp=Format.fprintfletpp_text=Cmdliner_base.pp_textletpp_lines=Cmdliner_base.pp_lines(* Environment variable errors *)leterr_env_parseenv~err=letvar=Cmdliner_info.Env.info_varenvinstrf"environment variable %s: %s"(quotevar)err(* Positional argument errors *)leterr_pos_excessexcess=strf"too many arguments, don't know what to do with %s"(String.concat", "(List.mapquoteexcess))leterr_pos_missa=matchCmdliner_info.Arg.docvawith|""->"a required argument is missing"|v->strf"required argument %s is missing"vleterr_pos_misses=function|[]->assertfalse|[a]->err_pos_missa|args->letadd_argacca=matchCmdliner_info.Arg.docvawith|""->"ARG"::acc|argv->argv::accinletrev_args=List.sortCmdliner_info.Arg.rev_pos_cli_orderargsinletargs=List.fold_leftadd_arg[]rev_argsinletargs=String.concat", "argsinstrf"required arguments %s are missing"argsleterr_pos_parsea~err=matchCmdliner_info.Arg.docvawith|""->err|argv->matchCmdliner_info.Arg.(pos_len@@pos_kinda)with|Some1->strf"%s argument: %s"argverr|None|Some_->strf"%s… arguments: %s"argverr(* Optional argument errors *)leterr_flag_valueflagv=strf"option %s is a flag, it cannot take the argument %s"(quoteflag)(quotev)leterr_opt_value_missingf=strf"option %s needs an argument"(quotef)leterr_opt_parsef~err=strf"option %s: %s"(quotef)errleterr_opt_repeatedff'=iff=f'thenstrf"option %s cannot be repeated"(quotef)elsestrf"options %s and %s cannot be present at the same time"(quotef)(quotef')(* Argument errors *)leterr_arg_missinga=ifCmdliner_info.Arg.is_posathenerr_pos_missaelsestrf"required option %s is missing"(Cmdliner_info.Arg.opt_name_samplea)leterr_cmd_missing~dom=strf"required COMMAND name is missing, must be %s."(Cmdliner_base.alts_str~quoted:truedom)(* Other messages *)letexec_nameei=Cmdliner_info.Cmd.name@@Cmdliner_info.Eval.maineiletpp_versionppfei=matchCmdliner_info.Cmd.version@@Cmdliner_info.Eval.maineiwith|None->assertfalse|Somev->ppppf"@[%a@]@."Cmdliner_base.pp_textvletpp_try_helpppfei=letrcmds=Cmdliner_info.Eval.(cmdei::parentsei)inmatchList.rev_mapCmdliner_info.Cmd.namercmdswith|[]->assertfalse|[n]->ppppf"@[<2>Try '%s --help' for more information.@]"n|n::_ascmds->letcmds=String.concat" "cmdsinppppf"@[<2>Try '%s --help' or '%s --help' for more information.@]"cmdsnletpp_errppfei~err=ppppf"%s: @[%a@]@."(exec_nameei)pp_lineserrletpp_err_usageppfei~err_lines~err=letpp_err=iferr_linesthenpp_lineselsepp_textinppppf"@[<v>%s: @[%a@]@,@[Usage: @[%a@]@]@,%a@]@."(exec_nameei)pp_errerr(Cmdliner_docgen.pp_plain_synopsis~errs:ppf)eipp_try_helpeiletpp_backtraceppfeiebt=letbt=Printexc.raw_backtrace_to_stringbtinletbt=letlen=String.lengthbtiniflen>0thenString.subbt0(len-1)(* remove final '\n' *)elsebtinppppf"%s: @[internal error, uncaught exception:@\n%a@]@."(exec_nameei)pp_lines(strf"%s\n%s"(Printexc.to_stringe)bt)