(* Parsing command-line options *) (* The type [options] gathers the command-line options. *) type language = [`PascaLIGO | `CameLIGO | `ReasonLIGO] let lang_to_string = function `PascaLIGO -> "PascaLIGO" | `CameLIGO -> "CameLIGO" | `ReasonLIGO -> "ReasonLIGO" module SSet = Set.Make (String) type options = < input : string option; libs : string list; verbose : SSet.t; offsets : bool; lang : language; ext : string (* ".ligo", ".mligo", ".religo" *) > let make ~input ~libs ~lang ~offsets ~verbose ~ext : options = object method input = input method libs = libs method lang = lang method offsets = offsets method verbose = verbose method ext = ext end (* Auxiliary functions and modules *) let printf = Printf.printf let sprintf = Printf.sprintf let print = print_endline (* Printing a string in red to standard error *) let highlight msg = Printf.eprintf "\027[31m%s\027[0m%!" msg (* Failure *) let abort msg = highlight (sprintf "Command-line error: %s\n" msg); exit 1 (* Help *) let help lang ext () = let file = Filename.basename Sys.argv.(0) in printf "Usage: %s [