fish: More informative documentation of optargs.
[libguestfs.git] / generator / generator_fish.ml
index c5def5c..4111be5 100644 (file)
@@ -30,6 +30,13 @@ open Generator_structs
 open Generator_prepopts
 open Generator_c
 
+let doc_opttype_of = function
+  | Bool n -> "true|false"
+  | Int n
+  | Int64 n -> "N"
+  | String n -> ".."
+  | _ -> assert false
+
 (* Generate a lot of different functions for guestfish. *)
 let generate_fish_cmds () =
   generate_header CStyle GPLv2plus;
@@ -56,11 +63,13 @@ let generate_fish_cmds () =
   pr "#include <string.h>\n";
   pr "#include <inttypes.h>\n";
   pr "\n";
-  pr "#include <guestfs.h>\n";
   pr "#include \"c-ctype.h\"\n";
   pr "#include \"full-write.h\"\n";
   pr "#include \"xstrtol.h\"\n";
+  pr "\n";
+  pr "#include <guestfs.h>\n";
   pr "#include \"fish.h\"\n";
+  pr "#include \"fish-cmds.h\"\n";
   pr "#include \"options.h\"\n";
   pr "#include \"cmds_gperf.h\"\n";
   pr "\n";
@@ -120,7 +129,9 @@ let generate_fish_cmds () =
               (String.concat ""
                  (List.map (fun arg -> " " ^ name_of_argt arg) args))
               (String.concat ""
-                 (List.map (fun arg -> sprintf " [%s:..]" (name_of_argt arg)) optargs)) in
+                 (List.map (fun arg ->
+                   sprintf " [%s:%s]" (name_of_argt arg) (doc_opttype_of arg)
+                  ) optargs)) in
 
       let warnings =
         if List.exists (function Key _ -> true | _ -> false) args then
@@ -134,16 +145,6 @@ Guestfish will prompt for these separately."
             ("\n\n" ^ protocol_limit_warning)
           else "" in
 
-      (* For DangerWillRobinson commands, we should probably have
-       * guestfish prompt before allowing you to use them (especially
-       * in interactive mode). XXX
-       *)
-      let warnings =
-        warnings ^
-          if List.mem DangerWillRobinson flags then
-            ("\n\n" ^ danger_will_robinson)
-          else "" in
-
       let warnings =
         warnings ^
           match deprecation_notice flags with
@@ -621,6 +622,22 @@ Guestfish will prompt for these separately."
   pr "  }\n";
   pr "}\n"
 
+and generate_fish_cmds_h () =
+  generate_header CStyle GPLv2plus;
+
+  pr "#ifndef FISH_CMDS_H\n";
+  pr "#define FISH_CMDS_H\n";
+  pr "\n";
+
+  List.iter (
+    fun (shortname, _, _, _, _, _, _) ->
+      pr "extern int run_%s (const char *cmd, size_t argc, char *argv[]);\n"
+        shortname
+  ) fish_commands;
+
+  pr "\n";
+  pr "#endif /* FISH_CMDS_H */\n"
+
 (* gperf code to do fast lookups of commands. *)
 and generate_fish_cmds_gperf () =
   generate_header CStyle GPLv2plus;
@@ -826,7 +843,8 @@ and generate_fish_actions_pod () =
       ) args;
       List.iter (
         function
-        | Bool n | Int n | Int64 n | String n -> pr " [%s:..]" n
+        | (Bool n | Int n | Int64 n | String n) as arg ->
+          pr " [%s:%s]" n (doc_opttype_of arg)
         | _ -> assert false
       ) optargs;
       pr "\n";
@@ -847,9 +865,6 @@ Guestfish will prompt for these separately.\n\n";
       if List.mem ProtocolLimitWarning flags then
         pr "%s\n\n" protocol_limit_warning;
 
-      if List.mem DangerWillRobinson flags then
-        pr "%s\n\n" danger_will_robinson;
-
       match deprecation_notice flags with
       | None -> ()
       | Some txt -> pr "%s\n\n" txt