···30303131exception Completion_requested of Cmdliner_def.Complete.t
32323333-let comp_request ?after_dashdash cline ~prefix kind =
3434- let comp = Cmdliner_def.Complete.make ?after_dashdash cline ~prefix kind in
3333+let comp_request ?after_dashdash cline ~token kind =
3434+ let comp = Cmdliner_def.Complete.make ?after_dashdash cline ~token kind in
3535 raise (Completion_requested comp)
36363737(* Command lines *)
···144144 | v :: rest when for_completion && has_complete_prefix v ->
145145 let v = get_token_to_complete v in
146146 if is_opt v then (* not an option value *) None, args else
147147- comp_request cline ~prefix:v (Opt_value arg_info)
147147+ comp_request cline ~token:v (Opt_value arg_info)
148148 | v :: rest ->
149149 if is_opt v then None, args else Some v, rest
150150···162162 (* This is actually a parse error, flags have no value. We
163163 make it an option completion but the completions will
164164 eventually be empty (the prefix won't match) *)
165165- comp_request cline ~prefix:(name ^ v) Opt_name
165165+ comp_request cline ~token:(name ^ v) Opt_name
166166 | None ->
167167 (* We have in fact a fully completed flag turn it into an
168168 option completion. *)
169169- comp_request cline ~prefix:name Opt_name
169169+ comp_request cline ~token:name Opt_name
170170 end
171171 | _ ->
172172 begin match value with
173173- | Some prefix -> comp_request cline ~prefix (Opt_value arg_info)
173173+ | Some token -> comp_request cline ~token (Opt_value arg_info)
174174 | None ->
175175 (* We have a fully completed option name, we don't try to
176176 lookup what happens in the next argument which should
177177 hold the value if any, we just turn it into an option
178178 completion. *)
179179- comp_request cline ~prefix:name Opt_name
179179+ comp_request cline ~token:name Opt_name
180180 end
181181182182let parse_opt_args
···213213 an argument this may confuse positional args but there's
214214 not much we can do. *)
215215 then loop errs (k + 1) cline pargs args else
216216- let prefix = name ^ Option.value ~default:"" value in
217217- comp_request cline ~prefix Opt_name
216216+ let token = name ^ Option.value ~default:"" value in
217217+ comp_request cline ~token Opt_name
218218 | Error `Not_found when peek_opts ->
219219 loop errs (k + 1) cline pargs args
220220 | Error `Not_found ->
···269269 let args =
270270 match take_range ~for_completion start stop pargs with
271271 | `Range args -> args
272272- | `Complete prefix ->
272272+ | `Complete token ->
273273 let kind = Cmdliner_def.Complete.Opt_name_or_pos_value a in
274274- comp_request ~after_dashdash:has_dashdash cline ~prefix kind
274274+ comp_request ~after_dashdash:has_dashdash cline ~token kind
275275 in
276276 let max_spec = max stop max_spec in
277277 let cline = Cmdliner_def.Arg_info.Map.add a (P args : arg) cline in
···285285 let consume_excess () =
286286 match take_range ~for_completion (max_spec + 1) last pargs with
287287 | `Range args -> args
288288- | `Complete prefix ->
289289- comp_request ~after_dashdash:has_dashdash cline ~prefix Opt_name
288288+ | `Complete token ->
289289+ comp_request ~after_dashdash:has_dashdash cline ~token Opt_name
290290 in
291291 if misses <> [] then begin
292292 let _ : string list = consume_excess () in
···319319 | Some arg ->
320320 match maybe_token_to_complete ~for_completion:true arg with
321321 | None -> assert false
322322- | Some prefix ->
322322+ | Some token ->
323323 comp_request
324324- ~after_dashdash:has_dashdash cline ~prefix Opt_name
324324+ ~after_dashdash:has_dashdash cline ~token Opt_name
325325 end
326326 | Error (errs, cline, has_dashdash, pargs) ->
327327 let _ : _ result =
+1-1
vendor/opam/cmdliner/src/cmdliner_cmd.ml
···20202121let get_info = function Cmd (info, _) | Group (info, _) -> info
2222let get_children_infos = function
2323-| Cmd _ -> assert false | Group (_, (_, cs)) -> List.map get_info cs
2323+| Cmd _ -> [] | Group (_, (_, cs)) -> List.map get_info cs
24242525let group ?default info cmds =
2626 let args, parser = match default with
+39-20
vendor/opam/cmdliner/src/cmdliner_completion.ml
···3434 Cmdliner_base.Fmt.pf ppf "@[<v>%d@,%a@]" vnum
3535 Cmdliner_base.Fmt.(list ~sep:nop pp_dir) dirs
36363737-let add_subcommands_group ~err_ppf ~subst cmd comp directives =
3737+let add_subcommands_group ~err_ppf ~subst eval comp directives =
3838 if not (Cmdliner_def.Complete.subcmds comp) then directives else
3939- let prefix = Cmdliner_def.Complete.prefix comp in
3939+ let prefix = Cmdliner_def.Complete.token comp in
4040 let maybe_item cmd =
4141 let name = Cmdliner_def.Cmd_info.name cmd in
4242 if not (Cmdliner_base.string_starts_with ~prefix name) then None else
···4444 let doc = Cmdliner_def.Cmd_info.styled_doc ~errs:err_ppf ~subst cmd in
4545 Some (name, doc)
4646 in
4747- let subcmds = Cmdliner_cmd.get_children_infos cmd in
4848- (Group ("Subcommands", List.filter_map maybe_item subcmds)) :: directives
4747+ let subcmds = Cmdliner_def.Eval.subcmds eval in
4848+ Group ("Subcommands", List.filter_map maybe_item subcmds) :: directives
49495050-let add_options_group ~err_ppf ~subst cmd comp directives =
5151- let prefix = Cmdliner_def.Complete.prefix comp in
5050+let add_options_group ~err_ppf ~subst eval comp directives =
5151+ let prefix = Cmdliner_def.Complete.token comp in
5252 let maybe_items arg_info =
5353 let names = Cmdliner_def.Arg_info.opt_names arg_info in
5454 let subst = Cmdliner_def.Arg_info.doclang_subst ~subst arg_info in
···6262 let maybe_opt = prefix = "" || prefix.[0] = '-' in
6363 if Cmdliner_def.Complete.after_dashdash comp || not maybe_opt
6464 then directives else
6565- let info = Cmdliner_cmd.get_info cmd in
6666- let set = Cmdliner_def.Cmd_info.args info in
6565+ let cmd_info = Cmdliner_def.Eval.cmd eval in
6666+ let set = Cmdliner_def.Cmd_info.args cmd_info in
6767 if Cmdliner_def.Arg_info.Set.is_empty set then directives else
6868 let options = Cmdliner_def.Arg_info.Set.elements set in
6969 Group ("Options", List.concat (List.map maybe_items options)) :: directives
70707171-let add_argument_value_directives directives comp =
7272- let Directives (pp, ds) = Cmdliner_def.Complete.directives comp in
7373- match ds with
7171+let add_argument_value_directives directives eval arg_info comp =
7272+ let (Conv conv) =
7373+ let arg_infos = Cmdliner_def.Cmd_info.args (Cmdliner_def.Eval.cmd eval) in
7474+ Option.get (Cmdliner_def.Arg_info.Set.find_opt arg_info arg_infos)
7575+ in
7676+ let value_dirs =
7777+ let completion = Cmdliner_def.Arg_conv.completion conv in
7878+ match Cmdliner_def.Arg_completion.complete completion with
7979+ | Complete (ctx, func) ->
8080+ let ctx = match ctx with
8181+ | None -> None
8282+ | Some ctx ->
8383+ let cline = Cmdliner_def.Complete.cline comp in
8484+ match (Cmdliner_term.parser ctx) eval cline with
8585+ | Ok ctx -> Some ctx
8686+ | Error _ -> None
8787+ | exception exn -> None
8888+ in
8989+ func ctx ~token:(Cmdliner_def.Complete.token comp)
9090+ in
9191+ match value_dirs with
7492 | Error msg -> `Directives [Message msg]
7593 | Ok ds ->
9494+ let pp = Cmdliner_def.Arg_conv.pp conv in
7695 let rec loop values msgs ~files ~dirs ~restart ~raw = function
7796 | [] ->
7897 begin match raw with
···103122 in
104123 loop [] [] ~files:false ~dirs:false ~restart:false ~raw:None ds
105124106106-let output ~out_ppf ~err_ppf ei cmd_args_info cmd comp =
107107- let subst = Cmdliner_def.Eval.doclang_subst ei in
108108- let dirs = add_subcommands_group ~err_ppf ~subst cmd comp [] in
125125+let output ~out_ppf ~err_ppf eval comp =
126126+ let subst = Cmdliner_def.Eval.doclang_subst eval in
127127+ let dirs = add_subcommands_group ~err_ppf ~subst eval comp [] in
109128 let res = match Cmdliner_def.Complete.kind comp with
110110- | Opt_value _arg_info ->
111111- add_argument_value_directives dirs comp
112112- | Opt_name_or_pos_value _arg_info ->
113113- let dirs = add_options_group ~err_ppf ~subst cmd comp dirs in
114114- add_argument_value_directives dirs comp
129129+ | Opt_value arg_info ->
130130+ add_argument_value_directives dirs eval arg_info comp
131131+ | Opt_name_or_pos_value arg_info ->
132132+ let dirs = add_options_group ~err_ppf ~subst eval comp dirs in
133133+ add_argument_value_directives dirs eval arg_info comp
115134 | Opt_name ->
116116- `Directives (add_options_group ~err_ppf ~subst cmd comp dirs)
135135+ `Directives (add_options_group ~err_ppf ~subst eval comp dirs)
117136 in
118137 match res with
119138 | `Raw raw -> Cmdliner_base.Fmt.pf out_ppf "%s@?" raw
···241241 and eval = (* information about the evaluation context. *)
242242 { cmd : cmd; (* cmd being evaluated. *)
243243 ancestors : cmd list; (* ancestors of cmd, root is last. *)
244244+ subcmds : cmd list; (* subcommands (if any) *)
244245 env : string -> string option; (* environment variable lookup. *)
245246 err_ppf : Format.formatter (* error formatter *) }
246247···327328module Eval = struct
328329 type t = Arg_info.eval
329330330330- let make ~cmd ~ancestors ~env ~err_ppf : t = { cmd; ancestors; env; err_ppf }
331331+ let make ~ancestors ~cmd ~subcmds ~env ~err_ppf : t =
332332+ { ancestors; cmd; subcmds; env; err_ppf }
331333332334 let cmd (i : t) = i.cmd
333335 let ancestors (i : t) = i.ancestors
336336+ let subcmds (i : t) = i.subcmds
334337 let env_var (i : t) v = i.env v
335338 let err_ppf (i : t) = i.err_ppf
336339 let main (i : t) = match List.rev i.ancestors with [] -> i.cmd | m :: _ -> m
···470473 | Opt_name_or_pos_value of Arg_info.t
471474 | Opt_name
472475473473- type directives =
474474- Directives :
475475- 'a Cmdliner_base.Fmt.t *
476476- ('a Arg_completion.directive list, string) result -> directives
477477-478476 type t =
479479- { context : Cline.t;
480480- prefix : string;
477477+ { cline : Cline.t;
478478+ token : string;
481479 after_dashdash : bool;
482480 subcmds : bool; (* Note this is adjusted in Cmdliner_eval *)
483483- kind : kind;
484484- directives : directives }
481481+ kind : kind }
485482486486- let make ?(after_dashdash = false) ?(subcmds = false) context ~prefix kind =
487487- { context; prefix; after_dashdash; subcmds; kind;
488488- directives = Directives (Cmdliner_base.Fmt.nop, Ok []) }
483483+ let make ?(after_dashdash = false) ?(subcmds = false) cline ~token kind =
484484+ { cline; token; after_dashdash; subcmds; kind; }
489485490490- let add_subcmds c = { c with subcmds = true }
491491- let add_directives pp directives c =
492492- { c with directives = Directives (pp, directives) }
493493-494494- let context c = c.context
495495- let prefix c = c.prefix
486486+ let cline c = c.cline
487487+ let token c = c.token
496488 let after_dashdash c = c.after_dashdash
497489 let subcmds c = c.subcmds
498490 let kind c = c.kind
499499- let directives c = c.directives
491491+ let add_subcmds c = { c with subcmds = true }
500492end
+6-16
vendor/opam/cmdliner/src/cmdliner_def.mli
···185185module Eval : sig
186186 type t
187187 val make :
188188- cmd:Cmd_info.t -> ancestors:Cmd_info.t list ->
188188+ ancestors:Cmd_info.t list -> cmd:Cmd_info.t -> subcmds:Cmd_info.t list ->
189189 env:(string -> string option) -> err_ppf:Format.formatter -> t
190190191191 val cmd : t -> Cmd_info.t
192192 val main : t -> Cmd_info.t
193193 val ancestors : t -> Cmd_info.t list (* root is last *)
194194+ val subcmds : t -> Cmd_info.t list
194195 val env_var : t -> string -> string option
195196 val err_ppf : t -> Format.formatter
196197 val with_cmd : t -> Cmd_info.t -> t
···264265 val none : 'a t
265266end
266267267267-268268(** Complete instruction. *)
269269module Complete : sig
270270 type kind =
···272272 | Opt_name_or_pos_value of Arg_info.t
273273 | Opt_name
274274275275- type directives =
276276- | Directives :
277277- 'a Cmdliner_base.Fmt.t *
278278- ('a Arg_completion.directive list, string) result -> directives
279279-280275 type t
281276282277 val make :
283283- ?after_dashdash:bool -> ?subcmds:bool -> Cline.t -> prefix:string ->
278278+ ?after_dashdash:bool -> ?subcmds:bool -> Cline.t -> token:string ->
284279 kind -> t
285280286286- val context : t -> Cline.t
287287- val add_subcmds : t -> t
288288- val add_directives :
289289- 'a Cmdliner_base.Fmt.t ->
290290- ('a Arg_completion.directive list, string) result -> t -> t
291291-292292- val prefix : t -> string
281281+ val cline : t -> Cline.t
282282+ val token : t -> string
293283 val after_dashdash : t -> bool
294284 val subcmds : t -> bool
295285 val kind : t -> kind
296296- val directives : t -> directives
286286+ val add_subcmds : t -> t
297287end
+68-104
vendor/opam/cmdliner/src/cmdliner_eval.ml
···77type eval_error = [ `Parse | `Term | `Exn ]
88type 'a eval_exit = [ `Ok of 'a | `Exit of Cmdliner_def.Exit.code ]
991010-type 'a complete =
1111- Cmdliner_def.Eval.t * Cmdliner_def.Arg_info.Set.t * 'a Cmdliner_cmd.t *
1212- Cmdliner_def.Complete.t
1313-1410type eval_result_error =
1511 [ Cmdliner_term.term_escape
1612 | `Exn of exn * Printexc.raw_backtrace
···1915 | `Std_version ]
20162117type 'a eval_result =
2222- ('a, [ eval_result_error | `Complete of 'a complete]) result
1818+ ('a, [ eval_result_error | `Complete of Cmdliner_def.Complete.t]) result
23192420let err_help s = "Term error, help requested for unknown command " ^ s
2521let err_argv = "argv array must have at least one element"
26222727-let add_stdopts ei =
2828- let docs = Cmdliner_def.Cmd_info.stdopts_docs (Cmdliner_def.Eval.cmd ei) in
2323+let add_stdopts eval =
2424+ let docs = Cmdliner_def.Cmd_info.stdopts_docs (Cmdliner_def.Eval.cmd eval) in
2925 let vargs, vers =
3030- match Cmdliner_def.Cmd_info.version (Cmdliner_def.Eval.main ei) with
2626+ match Cmdliner_def.Cmd_info.version (Cmdliner_def.Eval.main eval) with
3127 | None -> Cmdliner_def.Arg_info.Set.empty, None
3228 | Some _ ->
3329 let vers = Cmdliner_arg.stdopt_version ~docs in
···3733 let args =
3834 Cmdliner_def.Arg_info.Set.union vargs (Cmdliner_term.argset help)
3935 in
4040- let cmd = Cmdliner_def.Cmd_info.add_args (Cmdliner_def.Eval.cmd ei) args in
4141- help, vers, Cmdliner_def.Eval.with_cmd ei cmd
3636+ let cmd = Cmdliner_def.Cmd_info.add_args (Cmdliner_def.Eval.cmd eval) args in
3737+ help, vers, Cmdliner_def.Eval.with_cmd eval cmd
42384343-let run_parser ~catch ei cl f =
4444- try (f ei cl :> ('a, eval_result_error) result) with
3939+let run_parser ~catch eval cl f =
4040+ try (f eval cl :> ('a, eval_result_error) result) with
4541 | exn when catch ->
4642 let bt = Printexc.get_raw_backtrace () in
4743 Error (`Exn (exn, bt))
48444949-let run_parser_for_completion_context ei cline ctx =
5050- let parser = Cmdliner_term.parser ctx in
5151- match (parser ei cline :> ('a, eval_result_error) result) with
5252- | Ok ctx -> Some ctx
5353- | Error _ -> None
5454- | exception exn -> None
5555-5656-let try_eval_stdopts ~catch ei cl help version : 'a eval_result option =
5757- match run_parser ~catch ei cl (Cmdliner_term.parser help) with
4545+let try_eval_stdopts ~catch eval cline help version : 'a eval_result option =
4646+ match run_parser ~catch eval cline (Cmdliner_term.parser help) with
5847 | Ok (Some fmt) -> Some (Error (`Std_help fmt))
5948 | Error (`Parse _) ->
6049 (* only [FMT] errored, there was a `--help`, show help anyways *)
···6453 match version with
6554 | None -> None
6655 | Some version ->
6767- match (run_parser ~catch ei cl (Cmdliner_term.parser version))
5656+ match (run_parser ~catch eval cline (Cmdliner_term.parser version))
6857 with
6958 | Ok false -> None
7059 | Ok true -> Some (Error (`Std_version))
7160 | Error _ as err -> (Some err :> 'a eval_result option)
72617373-let do_help ~env help_ppf err_ppf ei fmt cmd_name =
7474- let ei = match cmd_name with
6262+let do_help ~env help_ppf err_ppf eval fmt cmd_name =
6363+ let eval = match cmd_name with
7564 | None (* help of main command requested *) ->
7665 let env _ = assert false in
7777- let cmd = Cmdliner_def.Eval.main ei in
7878- let ei' = Cmdliner_def.Eval.make ~cmd ~ancestors:[] ~env ~err_ppf in
7979- begin match Cmdliner_def.Eval.ancestors ei with
8080- | [] -> (* [ei] is an evaluation of main, [cmd] has stdopts *) ei'
8181- | _ -> let _, _, ei = add_stdopts ei' in ei
6666+ let cmd = Cmdliner_def.Eval.main eval in
6767+ let subcmds = Cmdliner_def.Eval.subcmds eval in
6868+ let eval' =
6969+ Cmdliner_def.Eval.make ~ancestors:[] ~cmd ~subcmds ~env ~err_ppf
7070+ in
7171+ begin match Cmdliner_def.Eval.ancestors eval with
7272+ | [] -> (* [ei] is an evaluation of main, [cmd] has stdopts *) eval'
7373+ | _ -> let _, _, eval' = add_stdopts eval' in eval'
8274 end
8375 | Some cmd ->
8476 try
8577 (* For now we simply keep backward compat. [cmd] should be
8678 a name from main's children. *)
8787- let main = Cmdliner_def.Eval.main ei in
7979+ let main = Cmdliner_def.Eval.main eval in
8880 let is_cmd t = Cmdliner_def.Cmd_info.name t = cmd in
8981 let children = Cmdliner_def.Cmd_info.children main in
9082 let cmd = List.find is_cmd children in
9191- let _, _, ei = add_stdopts (Cmdliner_def.Eval.with_cmd ei cmd) in
9292- ei
8383+ let _, _, eval = add_stdopts (Cmdliner_def.Eval.with_cmd eval cmd) in
8484+ eval
9385 with Not_found -> invalid_arg (err_help cmd)
9486 in
9595- Cmdliner_docgen.pp_man ~env ~errs:err_ppf fmt help_ppf ei
8787+ Cmdliner_docgen.pp_man ~env ~errs:err_ppf fmt help_ppf eval
96889797-let do_result ~env help_ppf err_ppf ei = function
8989+let do_result ~env help_ppf err_ppf eval = function
9890| Ok v -> Ok (`Ok v)
9991| Error res ->
10092 match res with
10193 | `Std_help fmt ->
102102- Cmdliner_docgen.pp_man ~env ~errs:err_ppf fmt help_ppf ei; Ok `Help
9494+ Cmdliner_docgen.pp_man ~env ~errs:err_ppf fmt help_ppf eval; Ok `Help
10395 | `Std_version ->
104104- Cmdliner_msg.pp_version help_ppf ei; Ok `Version
9696+ Cmdliner_msg.pp_version help_ppf eval; Ok `Version
10597 | `Parse err ->
106106- Cmdliner_msg.pp_usage_and_err err_ppf ei ~err; Error `Parse
107107- | `Complete (ei, cmd_args_info, cmd, comp) ->
108108- (* TODO quick hack this should not happen here *)
109109- let comp =
110110- let token = Cmdliner_def.Complete.prefix comp in
111111- let arg_info = match Cmdliner_def.Complete.kind comp with
112112- | Opt_value arg_info -> Some arg_info
113113- | Opt_name_or_pos_value arg_info -> Some arg_info
114114- | _ -> None
115115- in
116116- match arg_info with
117117- | None -> comp
118118- | Some arg_info ->
119119- match Cmdliner_def.Arg_info.Set.find_opt
120120- arg_info cmd_args_info with
121121- | None -> comp
122122- | Some (Conv c) ->
123123- let completion = Cmdliner_def.Arg_conv.completion c in
124124- match Cmdliner_def.Arg_completion.complete completion with
125125- | Complete (ctx, func) ->
126126- let cline = Cmdliner_def.Complete.context comp in
127127- let ctx = match ctx with
128128- | None -> None
129129- | Some ctx ->
130130- run_parser_for_completion_context ei cline ctx
131131- in
132132- let dirs = func ctx ~token in
133133- Cmdliner_def.Complete.add_directives
134134- (Cmdliner_def.Arg_conv.pp c) dirs comp
135135- in
136136- Cmdliner_completion.output
137137- ~out_ppf:help_ppf ~err_ppf ei cmd_args_info cmd comp; Ok `Help
9898+ Cmdliner_msg.pp_usage_and_err err_ppf eval ~err; Error `Parse
9999+ | `Complete comp ->
100100+ Cmdliner_completion.output ~out_ppf:help_ppf ~err_ppf eval comp;
101101+ Ok `Help
138102 | `Help (fmt, cmd_name) ->
139139- do_help ~env help_ppf err_ppf ei fmt cmd_name; Ok `Help
103103+ do_help ~env help_ppf err_ppf eval fmt cmd_name; Ok `Help
140104 | `Exn (e, bt) ->
141141- Cmdliner_msg.pp_backtrace err_ppf ei e bt; (Error `Exn)
105105+ Cmdliner_msg.pp_backtrace err_ppf eval e bt; (Error `Exn)
142106 | `Error (usage, err) ->
143107 (if usage
144144- then Cmdliner_msg.pp_usage_and_err err_ppf ei ~err
145145- else Cmdliner_msg.pp_err err_ppf ei ~err);
108108+ then Cmdliner_msg.pp_usage_and_err err_ppf eval ~err
109109+ else Cmdliner_msg.pp_err err_ppf eval ~err);
146110 Error `Term
147111148148-let do_deprecated_msgs ~env err_ppf cl ei =
149149- let cmd_info = Cmdliner_def.Eval.cmd ei in
112112+let do_deprecated_msgs ~env err_ppf cl eval =
113113+ let cmd_info = Cmdliner_def.Eval.cmd eval in
150114 let deprecated = Cmdliner_cline.deprecated ~env cl in
151115 match Cmdliner_def.Cmd_info.deprecated cmd_info, deprecated with
152116 | None, [] -> ()
···155119 let pp_sep ppf () =
156120 if Option.is_some depr_cmd && deprs <> [] then Fmt.cut ppf ();
157121 in
158158- let subst = Cmdliner_def.Eval.doclang_subst ei in
122122+ let subst = Cmdliner_def.Eval.doclang_subst eval in
159123 let pp_cmd_msg ppf cmd =
160124 match
161125 Cmdliner_def.Cmd_info.styled_deprecated ~subst ~errs:err_ppf cmd
···168132 in
169133 let pp_deprs = Fmt.list (Cmdliner_cline.pp_deprecated ~subst) in
170134 Fmt.pf err_ppf "@[%a @[<v>%a%a%a@]@]@."
171171- Cmdliner_msg.pp_exec_msg ei pp_cmd_msg cmd_info pp_sep () pp_deprs deprs
135135+ Cmdliner_msg.pp_exec_msg eval pp_cmd_msg cmd_info
136136+ pp_sep () pp_deprs deprs
172137173138let find_cmd_and_parser ~legacy_prefixes ~for_completion args cmd =
174139 (* This finds the command to use if it's a group and [for_completion]
···243208 let ancestors, cmd, args, parser =
244209 find_cmd_and_parser ~legacy_prefixes ~for_completion args cmd
245210 in
246246- let help, version, ei =
247247- let cmd_info = Cmdliner_cmd.get_info cmd in
248248- let ei = Cmdliner_def.Eval.make ~cmd:cmd_info ~ancestors ~env ~err_ppf in
249249- add_stdopts ei
211211+ let help, version, eval =
212212+ let subcmds = Cmdliner_cmd.get_children_infos cmd in
213213+ let cmd = Cmdliner_cmd.get_info cmd in
214214+ let eval = Cmdliner_def.Eval.make ~ancestors ~cmd ~subcmds ~env ~err_ppf in
215215+ add_stdopts eval
250216 in
251251- let cmd_args_info = Cmdliner_def.Cmd_info.args (Cmdliner_def.Eval.cmd ei) in
252217 let cline =
253253- Cmdliner_cline.create ~legacy_prefixes ~for_completion cmd_args_info args
218218+ let args_info = Cmdliner_def.Cmd_info.args (Cmdliner_def.Eval.cmd eval) in
219219+ Cmdliner_cline.create ~legacy_prefixes ~for_completion args_info args
254220 in
255221 let res = match parser with
256222 | Error (`Parse (try_stdopts, msg)) ->
257223 (* Command lookup error, we may still prioritize stdargs *)
258224 begin match cline with
259259- | `Complete comp -> Error (`Complete (ei, cmd_args_info, cmd, comp))
225225+ | `Complete comp -> Error (`Complete comp)
260226 | `Error (_, cl) | `Ok cl ->
261227 let stdopts =
262262- if try_stdopts then try_eval_stdopts ~catch ei cl help version else
263263- None
228228+ if try_stdopts
229229+ then try_eval_stdopts ~catch eval cl help version else None
264230 in
265231 begin match stdopts with
266232 | None -> Error (`Error (true, msg))
···271237 begin match cline with
272238 | `Complete comp ->
273239 let comp = Cmdliner_def.Complete.add_subcmds comp in
274274- Error (`Complete (ei, cmd_args_info, cmd, comp))
240240+ Error (`Complete comp)
275241 | `Ok _ | `Error _ -> assert false
276242 end
277243 | Ok parser ->
278244 begin match cline with
279279- | `Complete comp -> Error (`Complete (ei, cmd_args_info, cmd, comp))
245245+ | `Complete comp -> Error (`Complete comp)
280246 | `Error (e, cl) ->
281281- begin match try_eval_stdopts ~catch ei cl help version with
247247+ begin match try_eval_stdopts ~catch eval cl help version with
282248 | Some e -> e
283249 | None -> Error (`Error (true, e))
284250 end
285251 | `Ok cl ->
286286- match try_eval_stdopts ~catch ei cl help version with
252252+ match try_eval_stdopts ~catch eval cl help version with
287253 | Some e -> e
288254 | None ->
289289- do_deprecated_msgs ~env err_ppf cl ei;
290290- (run_parser ~catch ei cl parser :> 'a eval_result)
255255+ do_deprecated_msgs ~env err_ppf cl eval;
256256+ (run_parser ~catch eval cl parser :> 'a eval_result)
291257 end
292258 in
293293- do_result ~env help_ppf err_ppf ei res
259259+ do_result ~env help_ppf err_ppf eval res
294260295261let eval_peek_opts
296262 ?(version_opt = false) ?(env = Sys.getenv_opt) ?(argv = Sys.argv) t
···304270 let cmd_info = Cmdliner_def.Cmd_info.make ?version "dummy" in
305271 Cmdliner_def.Cmd_info.add_args cmd_info args, parser
306272 in
307307- let help, version, ei =
273273+ let help, version, eval =
308274 let err_ppf = Format.make_formatter (fun _ _ _ -> ()) (fun () -> ()) in
309309- let ancestors = [] in
310310- let ei = Cmdliner_def.Eval.make ~cmd:cmd_info ~ancestors ~env ~err_ppf in
311311- add_stdopts ei
275275+ let ancestors = [] and cmd = cmd_info and subcmds = [] in
276276+ let eval = Cmdliner_def.Eval.make ~ancestors ~cmd ~subcmds ~env ~err_ppf in
277277+ add_stdopts eval
312278 in
313313- let cmd_arg_infos = Cmdliner_def.Cmd_info.args (Cmdliner_def.Eval.cmd ei) in
314279 let cline =
280280+ let arg_infos = Cmdliner_def.Cmd_info.args (Cmdliner_def.Eval.cmd eval) in
315281 Cmdliner_cline.create
316316- ~peek_opts:true ~legacy_prefixes ~for_completion cmd_arg_infos args
282282+ ~peek_opts:true ~legacy_prefixes ~for_completion arg_infos args
317283 in
318284 let v, ret = match cline with
319319- | `Complete comp ->
320320- let cmd = Cmdliner_cmd.make cmd_info t in
321321- None, (Error (`Complete (ei, cmd_arg_infos, cmd, comp)))
285285+ | `Complete comp -> None, (Error (`Complete comp))
322286 | `Error (e, cl) ->
323323- begin match try_eval_stdopts ~catch:true ei cl help version with
287287+ begin match try_eval_stdopts ~catch:true eval cl help version with
324288 | Some e -> None, e
325289 | None -> None, Error (`Error (true, e))
326290 end
327291 | `Ok cl ->
328328- let ret = run_parser ~catch:true ei cl parser in
292292+ let ret = run_parser ~catch:true eval cl parser in
329293 let v = match ret with Ok v -> Some v | Error _ -> None in
330330- begin match try_eval_stdopts ~catch:true ei cl help version with
294294+ begin match try_eval_stdopts ~catch:true eval cl help version with
331295 | Some e -> v, e
332296 | None -> v, (ret :> 'a eval_result)
333297 end
+106
vendor/opam/cmdliner/test/test_completion.ml
···2323 complete ["--__complete="] @@ __POS_OF__
2424 "1\n\
2525 group\n\
2626+ Options\n\
2727+ item\n\
2828+ --version\n\
2929+ Show version information.\n\
3030+ item-end\n\
3131+ item\n\
3232+ --help\n\
3333+ Show this help in format \u{001B}[04mFMT\u{001B}[m. The value \u{001B}[04mFMT\u{001B}[m must be one of \u{001B}[01mauto\u{001B}[m, \u{001B}[01mpager\u{001B}[m, \u{001B}[01mgroff\u{001B}[m\n\
3434+ or \u{001B}[01mplain\u{001B}[m. With \u{001B}[01mauto\u{001B}[m, the format is \u{001B}[01mpager\u{001B}[m or \u{001B}[01mplain\u{001B}[m whenever the \u{001B}[01mTERM\u{001B}[m env var\n\
3535+ is \u{001B}[01mdumb\u{001B}[m or undefined.\n\
3636+ item-end\n\
3737+ group\n\
2638 Subcommands\n\
2739 item\n\
2840 birds\n\
···6072 --can-fly\n\
6173 \u{001B}[04mBOOL\u{001B}[m indicates if the entity can fly.\n\
6274 item-end\n\
7575+ item\n\
7676+ --version\n\
7777+ Show version information.\n\
7878+ item-end\n\
7979+ item\n\
8080+ --help\n\
8181+ Show this help in format \u{001B}[04mFMT\u{001B}[m. The value \u{001B}[04mFMT\u{001B}[m must be one of \u{001B}[01mauto\u{001B}[m, \u{001B}[01mpager\u{001B}[m, \u{001B}[01mgroff\u{001B}[m\n\
8282+ or \u{001B}[01mplain\u{001B}[m. With \u{001B}[01mauto\u{001B}[m, the format is \u{001B}[01mpager\u{001B}[m or \u{001B}[01mplain\u{001B}[m whenever the \u{001B}[01mTERM\u{001B}[m env var\n\
8383+ is \u{001B}[01mdumb\u{001B}[m or undefined.\n\
8484+ item-end\n\
6385 group\n\
6486 Subcommands\n\
6587 item\n\
···81103 item\n\
82104 --speed\n\
83105 Movement \u{001B}[04mSPEED\u{001B}[m in m/s\n\
106106+ item-end\n\
107107+ item\n\
108108+ --version\n\
109109+ Show version information.\n\
110110+ item-end\n\
111111+ item\n\
112112+ --help\n\
113113+ Show this help in format \u{001B}[04mFMT\u{001B}[m. The value \u{001B}[04mFMT\u{001B}[m must be one of \u{001B}[01mauto\u{001B}[m, \u{001B}[01mpager\u{001B}[m, \u{001B}[01mgroff\u{001B}[m\n\
114114+ or \u{001B}[01mplain\u{001B}[m. With \u{001B}[01mauto\u{001B}[m, the format is \u{001B}[01mpager\u{001B}[m or \u{001B}[01mplain\u{001B}[m whenever the \u{001B}[01mTERM\u{001B}[m env var\n\
115115+ is \u{001B}[01mdumb\u{001B}[m or undefined.\n\
84116 item-end\n";
85117 complete ["birds"; "fly"; "--"; "--__complete="] @@ __POS_OF__
86118 "1\n";
···104136 --can-fly\n\
105137 \u{001B}[04mBOOL\u{001B}[m indicates if the entity can fly.\n\
106138 item-end\n\
139139+ item\n\
140140+ --version\n\
141141+ Show version information.\n\
142142+ item-end\n\
143143+ item\n\
144144+ --help\n\
145145+ Show this help in format \u{001B}[04mFMT\u{001B}[m. The value \u{001B}[04mFMT\u{001B}[m must be one of \u{001B}[01mauto\u{001B}[m, \u{001B}[01mpager\u{001B}[m, \u{001B}[01mgroff\u{001B}[m\n\
146146+ or \u{001B}[01mplain\u{001B}[m. With \u{001B}[01mauto\u{001B}[m, the format is \u{001B}[01mpager\u{001B}[m or \u{001B}[01mplain\u{001B}[m whenever the \u{001B}[01mTERM\u{001B}[m env var\n\
147147+ is \u{001B}[01mdumb\u{001B}[m or undefined.\n\
148148+ item-end\n\
107149 group\n\
108150 Subcommands\n";
109151 complete ["birds"; "--__complete=--"] @@ __POS_OF__
···117159 item\n\
118160 --can-fly\n\
119161 \u{001B}[04mBOOL\u{001B}[m indicates if the entity can fly.\n\
162162+ item-end\n\
163163+ item\n\
164164+ --version\n\
165165+ Show version information.\n\
166166+ item-end\n\
167167+ item\n\
168168+ --help\n\
169169+ Show this help in format \u{001B}[04mFMT\u{001B}[m. The value \u{001B}[04mFMT\u{001B}[m must be one of \u{001B}[01mauto\u{001B}[m, \u{001B}[01mpager\u{001B}[m, \u{001B}[01mgroff\u{001B}[m\n\
170170+ or \u{001B}[01mplain\u{001B}[m. With \u{001B}[01mauto\u{001B}[m, the format is \u{001B}[01mpager\u{001B}[m or \u{001B}[01mplain\u{001B}[m whenever the \u{001B}[01mTERM\u{001B}[m env var\n\
171171+ is \u{001B}[01mdumb\u{001B}[m or undefined.\n\
120172 item-end\n";
121173 ()
122174···163215 item\n\
164216 --can-fly\n\
165217 \u{001B}[04mBOOL\u{001B}[m indicates if the entity can fly.\n\
218218+ item-end\n\
219219+ item\n\
220220+ --version\n\
221221+ Show version information.\n\
222222+ item-end\n\
223223+ item\n\
224224+ --help\n\
225225+ Show this help in format \u{001B}[04mFMT\u{001B}[m. The value \u{001B}[04mFMT\u{001B}[m must be one of \u{001B}[01mauto\u{001B}[m, \u{001B}[01mpager\u{001B}[m, \u{001B}[01mgroff\u{001B}[m\n\
226226+ or \u{001B}[01mplain\u{001B}[m. With \u{001B}[01mauto\u{001B}[m, the format is \u{001B}[01mpager\u{001B}[m or \u{001B}[01mplain\u{001B}[m whenever the \u{001B}[01mTERM\u{001B}[m env var\n\
227227+ is \u{001B}[01mdumb\u{001B}[m or undefined.\n\
166228 item-end\n";
167229 complete ["birds"; "--can-fly"; "true"; "--__complete="] @@ __POS_OF__
168230 "1\n\
···179241 item\n\
180242 --can-fly\n\
181243 \u{001B}[04mBOOL\u{001B}[m indicates if the entity can fly.\n\
244244+ item-end\n\
245245+ item\n\
246246+ --version\n\
247247+ Show version information.\n\
248248+ item-end\n\
249249+ item\n\
250250+ --help\n\
251251+ Show this help in format \u{001B}[04mFMT\u{001B}[m. The value \u{001B}[04mFMT\u{001B}[m must be one of \u{001B}[01mauto\u{001B}[m, \u{001B}[01mpager\u{001B}[m, \u{001B}[01mgroff\u{001B}[m\n\
252252+ or \u{001B}[01mplain\u{001B}[m. With \u{001B}[01mauto\u{001B}[m, the format is \u{001B}[01mpager\u{001B}[m or \u{001B}[01mplain\u{001B}[m whenever the \u{001B}[01mTERM\u{001B}[m env var\n\
253253+ is \u{001B}[01mdumb\u{001B}[m or undefined.\n\
182254 item-end\n";
183255 ()
184256···221293 item\n\
222294 --kind\n\
223295 \u{001B}[04mENUM\u{001B}[m restricts the animal kind. Must be either \u{001B}[01mbird\u{001B}[m or \u{001B}[01mfish\u{001B}[m\n\
296296+ item-end\n\
297297+ item\n\
298298+ --version\n\
299299+ Show version information.\n\
300300+ item-end\n\
301301+ item\n\
302302+ --help\n\
303303+ Show this help in format \u{001B}[04mFMT\u{001B}[m. The value \u{001B}[04mFMT\u{001B}[m must be one of \u{001B}[01mauto\u{001B}[m, \u{001B}[01mpager\u{001B}[m, \u{001B}[01mgroff\u{001B}[m\n\
304304+ or \u{001B}[01mplain\u{001B}[m. With \u{001B}[01mauto\u{001B}[m, the format is \u{001B}[01mpager\u{001B}[m or \u{001B}[01mplain\u{001B}[m whenever the \u{001B}[01mTERM\u{001B}[m env var\n\
305305+ is \u{001B}[01mdumb\u{001B}[m or undefined.\n\
224306 item-end\n";
225307 complete ["lookup"; "-kfish"; "--__complete=s"] @@ __POS_OF__
226308 "1\n\
···279361 item\n\
280362 --verbose\n\
281363 \n\
364364+ item-end\n\
365365+ item\n\
366366+ --help\n\
367367+ Show this help in format \u{001B}[04mFMT\u{001B}[m. The value \u{001B}[04mFMT\u{001B}[m must be one of \u{001B}[01mauto\u{001B}[m, \u{001B}[01mpager\u{001B}[m, \u{001B}[01mgroff\u{001B}[m\n\
368368+ or \u{001B}[01mplain\u{001B}[m. With \u{001B}[01mauto\u{001B}[m, the format is \u{001B}[01mpager\u{001B}[m or \u{001B}[01mplain\u{001B}[m whenever the \u{001B}[01mTERM\u{001B}[m env var\n\
369369+ is \u{001B}[01mdumb\u{001B}[m or undefined.\n\
282370 item-end\n";
283371 complete ["--__complete=g"] @@ __POS_OF__
284372 "1\n\
···296384 item\n\
297385 --verbose\n\
298386 \n\
387387+ item-end\n\
388388+ item\n\
389389+ --help\n\
390390+ Show this help in format \u{001B}[04mFMT\u{001B}[m. The value \u{001B}[04mFMT\u{001B}[m must be one of \u{001B}[01mauto\u{001B}[m, \u{001B}[01mpager\u{001B}[m, \u{001B}[01mgroff\u{001B}[m\n\
391391+ or \u{001B}[01mplain\u{001B}[m. With \u{001B}[01mauto\u{001B}[m, the format is \u{001B}[01mpager\u{001B}[m or \u{001B}[01mplain\u{001B}[m whenever the \u{001B}[01mTERM\u{001B}[m env var\n\
392392+ is \u{001B}[01mdumb\u{001B}[m or undefined.\n\
299393 item-end\n";
300394 complete ["--"; "git"; "--__complete="] @@ __POS_OF__
301395 "1\n\
···323417 item\n\
324418 --verbose\n\
325419 \n\
420420+ item-end\n\
421421+ item\n\
422422+ --help\n\
423423+ Show this help in format \u{001B}[04mFMT\u{001B}[m. The value \u{001B}[04mFMT\u{001B}[m must be one of \u{001B}[01mauto\u{001B}[m, \u{001B}[01mpager\u{001B}[m, \u{001B}[01mgroff\u{001B}[m\n\
424424+ or \u{001B}[01mplain\u{001B}[m. With \u{001B}[01mauto\u{001B}[m, the format is \u{001B}[01mpager\u{001B}[m or \u{001B}[01mplain\u{001B}[m whenever the \u{001B}[01mTERM\u{001B}[m env var\n\
425425+ is \u{001B}[01mdumb\u{001B}[m or undefined.\n\
326426 item-end\n";
327427 (* The following two do not restart because -- is missing *)
328428 complete ["--__complete=gi"] @@ __POS_OF__
···334434 item\n\
335435 --verbose\n\
336436 \n\
437437+ item-end\n\
438438+ item\n\
439439+ --help\n\
440440+ Show this help in format \u{001B}[04mFMT\u{001B}[m. The value \u{001B}[04mFMT\u{001B}[m must be one of \u{001B}[01mauto\u{001B}[m, \u{001B}[01mpager\u{001B}[m, \u{001B}[01mgroff\u{001B}[m\n\
441441+ or \u{001B}[01mplain\u{001B}[m. With \u{001B}[01mauto\u{001B}[m, the format is \u{001B}[01mpager\u{001B}[m or \u{001B}[01mplain\u{001B}[m whenever the \u{001B}[01mTERM\u{001B}[m env var\n\
442442+ is \u{001B}[01mdumb\u{001B}[m or undefined.\n\
337443 item-end\n";
338444 (* These must restart *)
339445 complete ["--"; "--__complete=gi"] @@ __POS_OF__