44 lines
1.3 KiB
OCaml
44 lines
1.3 KiB
OCaml
(** Test double for sherlodoc: it understands `js` and `index` commands, and
|
|
creates their output files. *)
|
|
|
|
open Stdune
|
|
|
|
let arg_db = ref ""
|
|
let args_favored = ref []
|
|
|
|
let args_index =
|
|
[ "--format", Arg.String ignore, ""
|
|
; "--favoured-prefixes", Arg.String ignore, ""
|
|
; ( "--favoured"
|
|
, Arg.String (fun fav_odocl -> args_favored := fav_odocl :: !args_favored)
|
|
, "" )
|
|
; "--db", Arg.Set_string arg_db, ""
|
|
]
|
|
;;
|
|
|
|
let parse_index_args args =
|
|
let inputs = ref [] in
|
|
Arg.parse_argv
|
|
(Array.of_list args)
|
|
args_index
|
|
(fun input -> inputs := input :: !inputs)
|
|
"";
|
|
!inputs, !arg_db
|
|
;;
|
|
|
|
let () =
|
|
match Array.to_list Sys.argv with
|
|
| [] -> assert false
|
|
| [ _; "js"; output ] ->
|
|
Out_channel.with_open_bin output (fun oc ->
|
|
Out_channel.output_string oc "/* Output of sherlodoc js */\n")
|
|
| _ :: "index" :: index_args ->
|
|
let deps, target = parse_index_args index_args in
|
|
Out_channel.with_open_bin target (fun oc ->
|
|
Out_channel.output_string oc "/* Sherlodoc DB for: */\n";
|
|
List.iter deps ~f:(fun dep -> Printf.fprintf oc "/* - %s */\n" dep);
|
|
List.iter !args_favored ~f:(fun dep ->
|
|
Printf.fprintf oc "/* - --favored %s */\n" dep))
|
|
| _ :: args ->
|
|
Printf.ksprintf failwith "sherlodoc(fake): %s" (String.concat ~sep:"," args)
|
|
;;
|