From fa582037fa6e4db96147d1cbefc581ac559a5d94 Mon Sep 17 00:00:00 2001
From: Michele Alberti <michele.alberti@cea.fr>
Date: Wed, 2 Nov 2022 12:14:34 +0100
Subject: [PATCH] Rework and prepare cmdline to accept new command.

---
 src/main.ml | 75 ++++++++++++++++++++++++-----------------------------
 1 file changed, 34 insertions(+), 41 deletions(-)

diff --git a/src/main.ml b/src/main.ml
index 9afb6b4..6b22ab7 100644
--- a/src/main.ml
+++ b/src/main.ml
@@ -158,7 +158,7 @@ let config_cmd =
       ret
         (const (fun detect _ ->
            if not detect
-           then `Help (`Pager, Some "config")
+           then `Help (`Pager, Some cmdname)
            else
              (* TODO: Do not only check for [detect], and enable it by default,
                 as soon as other options are available. *)
@@ -167,47 +167,43 @@ let config_cmd =
   in
   Cmd.v info term
 
+let memlimit =
+  let doc =
+    "Memory limit. $(docv) is intended in megabytes (MB) by default, but \
+     gigabytes (GB) and terabytes (TB) may also be specified instead."
+  in
+  Arg.(
+    value & opt (some string) None & info [ "m"; "memlimit" ] ~doc ~docv:"MEM")
+
+let timelimit =
+  let doc =
+    "Time limit. $(docv) is intended in seconds (s) by default, but minutes \
+     (m) and hours (h) may also be specified instead."
+  in
+  Arg.(
+    value & opt (some string) None & info [ "t"; "timelimit" ] ~doc ~docv:"TIME")
+
+let format =
+  let doc = "File format." in
+  Arg.(value & opt (some string) None & info [ "format" ] ~doc)
+
+let loadpath =
+  let doc = "Additional loadpath." in
+  Arg.(value & opt_all string [ "." ] & info [ "L"; "loadpath" ] ~doc)
+
 let verify_cmd =
   let cmdname = "verify" in
-  let doc = "Property verification using external provers." in
   let info =
+    let doc = "Property verification using external provers." in
     Cmd.info cmdname ~sdocs:Manpage.s_common_options ~exits:Cmd.Exit.defaults
       ~doc
       ~man:[ `S Manpage.s_description; `P doc ]
   in
   let term =
     let files =
-      let doc = "Files to verify." in
+      let doc = "File to verify." in
       let file_or_stdin = Verification.File.(of_string, pretty) in
-      Arg.(value & pos_all file_or_stdin [] & info [] ~doc)
-    in
-    let format =
-      let doc = "File format." in
-      Arg.(value & opt (some string) None & info [ "format" ] ~doc)
-    in
-    let loadpath =
-      let doc = "Additional loadpath." in
-      Arg.(value & opt_all string [ "." ] & info [ "L"; "loadpath" ] ~doc)
-    in
-    let memlimit =
-      let doc =
-        "Memory limit. $(docv) is intended in megabytes (MB) by default, but \
-         gigabytes (GB) and terabytes (TB) may also be specified instead."
-      in
-      Arg.(
-        value
-        & opt (some string) None
-        & info [ "m"; "memlimit" ] ~doc ~docv:"MEM")
-    in
-    let timelimit =
-      let doc =
-        "Time limit. $(docv) is intended in seconds (s) by default, but \
-         minutes (m) and hours (h) may also be specified instead."
-      in
-      Arg.(
-        value
-        & opt (some string) None
-        & info [ "t"; "timelimit" ] ~doc ~docv:"TIME")
+      Arg.(non_empty & pos_all file_or_stdin [] & info [] ~doc ~docv:"FILE")
     in
     let prover =
       let all_provers = Prover.list_available () in
@@ -227,15 +223,12 @@ let verify_cmd =
       Arg.(value & opt (some file) None & info [ "dataset-csv" ] ~doc)
     in
     Term.(
-      ret
-        (const
-           (fun format loadpath memlimit timelimit prover dataset_csv files _ ->
-           `Ok
-             (exec_cmd cmdname (fun () ->
-                verify format loadpath memlimit timelimit prover dataset_csv
-                  files)))
-        $ format $ loadpath $ memlimit $ timelimit $ prover $ dataset_csv
-        $ files $ setup_logs))
+      const
+        (fun format loadpath memlimit timelimit prover dataset_csv files _ ->
+        exec_cmd cmdname (fun () ->
+          verify format loadpath memlimit timelimit prover dataset_csv files))
+      $ format $ loadpath $ memlimit $ timelimit $ prover $ dataset_csv $ files
+      $ setup_logs)
   in
   Cmd.v info term
 
-- 
GitLab