if String.contains name '-' then
failwithf "function name %s should not contain '-', use '_' instead."
name
- ) all_functions;
+ ) (all_functions @ fish_commands);
(* Check function parameter/return names. *)
List.iter (
failwithf "%s has param/ret using reserved word %s" name n;
in
- (match fst style with
+ let ret, args, optargs = style in
+
+ (match ret with
| RErr -> ()
| RInt n | RInt64 n | RBool n
| RConstString n | RConstOptString n | RString n
| RHashtable n | RBufferOut n ->
check_arg_ret_name n
);
- List.iter (fun arg -> check_arg_ret_name (name_of_argt arg)) (snd style)
+ List.iter (fun arg -> check_arg_ret_name (name_of_argt arg)) args;
+ List.iter (fun arg -> check_arg_ret_name (name_of_argt arg)) optargs;
) all_functions;
+ (* Check only certain types allowed in optargs. *)
+ List.iter (
+ fun (name, (_, _, optargs), _, _, _, _, _) ->
+ if List.length optargs > 64 then
+ failwithf "maximum of 64 optional args allowed for %s" name;
+
+ List.iter (
+ function
+ | Bool _ | Int _ | Int64 _ | String _ -> ()
+ | _ ->
+ failwithf "optional args of %s can only have type Bool|Int|Int64|String" name
+ ) optargs
+ ) all_functions;
+
+ (* Some parameter types not supported for daemon functions. *)
+ List.iter (
+ fun (name, (_, args, optargs), _, _, _, _, _) ->
+ let check_arg_type = function
+ | Pointer _ ->
+ failwithf "Pointer is not supported for daemon function %s."
+ name
+ | _ -> ()
+ in
+ List.iter check_arg_type args;
+ List.iter check_arg_type optargs;
+ ) daemon_functions;
+
(* Check short descriptions. *)
List.iter (
fun (name, _, _, _, _, shortdesc, _) ->
let c = shortdesc.[String.length shortdesc-1] in
if c = '\n' || c = '.' then
failwithf "short description of %s should not end with . or \\n." name
- ) all_functions;
+ ) (all_functions @ fish_commands);
(* Check long descriptions. *)
List.iter (
fun (name, _, _, _, _, _, longdesc) ->
if longdesc.[String.length longdesc-1] = '\n' then
failwithf "long description of %s should not end with \\n." name
- ) all_functions;
+ ) (all_functions @ fish_commands);
(* Check proc_nrs. *)
List.iter (
in
loop proc_nrs;
+ (* Check flags. *)
+ List.iter (
+ fun (name, _, _, flags, _, _, _) ->
+ List.iter (
+ function
+ | ProtocolLimitWarning
+ | DangerWillRobinson
+ | FishOutput _
+ | NotInFish
+ | NotInDocs
+ | Progress -> ()
+ | FishAlias n ->
+ if contains_uppercase n then
+ failwithf "%s: guestfish alias %s should not contain uppercase chars" name n;
+ if String.contains n '_' then
+ failwithf "%s: guestfish alias %s should not contain '_'" name n
+ | DeprecatedBy n ->
+ (* 'n' must be a cross-ref to the name of another action. *)
+ if not (List.exists (
+ function
+ | (n', _, _, _, _, _, _) when n = n' -> true
+ | _ -> false
+ ) all_functions) then
+ failwithf "%s: DeprecatedBy flag must be cross-reference to another action" name
+ | Optional n ->
+ if contains_uppercase n then
+ failwithf "%s: Optional group name %s should not contain uppercase chars" name n;
+ if String.contains n '-' || String.contains n '_' then
+ failwithf "%s: Optional group name %s should not contain '-' or '_'" name n
+ ) flags
+ ) (all_functions @ fish_commands);
+
(* Check tests. *)
List.iter (
function