module Report = Qsp_syntax.Report let input_files = ref [] let usage = Printf.sprintf "%s input_file" (Filename.basename Sys.executable_name) let anon_fun filename = input_files := filename :: !input_files let level_value = ref None let reset_line = ref false let interractive = ref true type filters = { level : Report.level option } type t = { reset_line : bool; filters : filters; interractive : bool } (** All the arguments given from the command line *) let level : string -> unit = fun str_level -> match Report.level_of_string str_level with | Ok level_ -> level_value := Some level_ | Error e -> print_endline e; exit 1 let speclist = let common_arguments = [ ( "--version", Arg.Unit (fun () -> Printf.printf "Version %s\n" Tools.Git_hash.revision; exit 0), "\tDisplay the version of the application and exit" ); ("--level", Arg.String level, "\tMessage level [debug, warn, error]"); ( "--global", Arg.Set reset_line, "\tEach line is refered from the begining of the file and not the \ location" ); ] and windows_arguments = match Sys.os_type with | "Win32" -> [ ( "--no-prompt", Arg.Clear interractive, "\tDo not ask the user to press enter after processing the source" ); ] | _ -> interractive := false; [] in common_arguments @ windows_arguments let parse : unit -> string list * t = fun () -> let () = Arg.parse (Arg.align speclist) anon_fun usage in match !input_files with | [] -> Arg.usage (Arg.align speclist) usage; prerr_endline ""; prerr_endline "Error, you should provide at least one file to parse."; exit 1 | _ -> let filters = { level = !level_value } in ( !input_files, { reset_line = !reset_line; filters; interractive = !interractive } )