107 lines
2.3 KiB
OCaml
107 lines
2.3 KiB
OCaml
(** Mock ocaml-index real CLI *)
|
|
|
|
open Cmdliner
|
|
|
|
let touch file =
|
|
let chan = open_out file in
|
|
close_out chan
|
|
;;
|
|
|
|
module Common = struct
|
|
let set_log_level _ _ = ()
|
|
|
|
let verbose =
|
|
let doc = "increase log verbosity" in
|
|
Arg.(value & flag & info [ "v"; "verbose" ] ~doc)
|
|
;;
|
|
|
|
let debug =
|
|
let doc = "set maximum log verbosity" in
|
|
Arg.(value & flag & info [ "debug" ] ~doc)
|
|
;;
|
|
|
|
let with_log = Term.(const set_log_level $ debug $ verbose)
|
|
|
|
let output_file =
|
|
let doc = "name of the generated index" in
|
|
Arg.(value & opt string "project.ocaml-index" & info [ "o"; "output-file" ] ~doc)
|
|
;;
|
|
end
|
|
|
|
module Aggregate = struct
|
|
let from_files _ _ output_file _ _ _ () = touch output_file
|
|
|
|
let root =
|
|
let doc = "if provided all locations will be appended to that path" in
|
|
Arg.(value & opt (some string) None & info [ "root" ] ~doc)
|
|
;;
|
|
|
|
let files =
|
|
let doc = "the files to index" in
|
|
Arg.(value & pos_all string [] & info [] ~doc)
|
|
;;
|
|
|
|
let build_path =
|
|
let doc = "an extra directory to add to the load path" in
|
|
Arg.(value & opt_all string [] & info [ "I" ] ~doc)
|
|
;;
|
|
|
|
let store_shapes =
|
|
let doc = "aggregate input-indexes shapes and store them in the new index" in
|
|
Arg.(value & flag & info [ "store-shapes" ] ~doc)
|
|
;;
|
|
|
|
let no_cmt =
|
|
let doc = "" in
|
|
Arg.(value & flag & info [ "no-cmt-load-path" ] ~doc)
|
|
;;
|
|
|
|
let term =
|
|
Term.(
|
|
const from_files
|
|
$ store_shapes
|
|
$ root
|
|
$ Common.output_file
|
|
$ build_path
|
|
$ no_cmt
|
|
$ files
|
|
$ Common.with_log)
|
|
;;
|
|
|
|
let cmd =
|
|
let info =
|
|
let doc = "builds the index for a single $(i, .cmt) file" in
|
|
Cmd.info "aggregate" ~doc
|
|
in
|
|
Cmd.v info term
|
|
;;
|
|
end
|
|
|
|
module Dump = struct
|
|
let dump file () = Printf.printf "Dump %s" file
|
|
|
|
let file =
|
|
let doc = "the file to dump" in
|
|
Arg.(required & pos 0 (some string) None & info [] ~doc)
|
|
;;
|
|
|
|
let term = Term.(const dump $ file $ Common.with_log)
|
|
|
|
let cmd =
|
|
let info =
|
|
let doc = "print the content of an index file to stdout" in
|
|
Cmd.info "dump" ~doc
|
|
in
|
|
Cmd.v info term
|
|
;;
|
|
end
|
|
|
|
let subcommands =
|
|
let info =
|
|
let doc = "An indexer for OCaml's artifacts" in
|
|
Cmd.info "ocaml-index" ~doc
|
|
in
|
|
Cmd.group info ~default:Aggregate.term [ Aggregate.cmd; Dump.cmd ]
|
|
;;
|
|
|
|
let () = exit (Cmd.eval subcommands)
|