vif/bin/vif.ml
2025-01-03 11:54:13 +01:00

52 lines
1.6 KiB
OCaml

let reporter ppf =
let report src level ~over k msgf =
let k _ = over (); k () in
let with_metadata header _tags k ppf fmt =
Format.kfprintf k ppf
("%a[%a]: " ^^ fmt ^^ "\n%!")
Logs_fmt.pp_header (level, header)
Fmt.(styled `Magenta string)
(Logs.Src.name src)
in
msgf @@ fun ?header ?tags fmt -> with_metadata header tags k ppf fmt
in
{ Logs.report }
let () = Fmt_tty.setup_std_outputs ~style_renderer:`Ansi_tty ~utf_8:true ()
let () = Logs.set_reporter (reporter Fmt.stdout)
let () = Logs.set_level ~all:true (Some Logs.Debug)
let main =
[
{ocaml|let v = 42;;|ocaml}
; {ocaml|let rec infinity () = infinity ();;|ocaml}
; {ocaml|print_endline "Hello World!";;|ocaml}
; {ocaml|let a = Bool.to_int true;;|ocaml}; {ocaml|#show_dirs;;|ocaml}
; {ocaml|#directory "/home/dinosaure/.opam/5.2.0+ocamlnat/lib/ocaml/";;|ocaml}
; {ocaml|#load "/home/dinosaure/.opam/5.2.0+ocamlnat/lib/ocaml/stdlib.cmxa";;|ocaml}
; {ocaml|#require "miou";;|ocaml}
; {ocaml|let fn () = print_endline "Hello from Miou!";;|ocaml}
; {ocaml|Miou.run fn;;|ocaml}
]
let stdlib = Fpath.v "/home/dinosaure/.opam/5.2.0+ocamlnat/lib/ocaml/"
let run roots =
let cfg = Vif_top.config ~stdlib roots in
match Vif_top.eval cfg main with
| Ok sstr -> List.iter print_endline sstr
| Error sstr -> List.iter prerr_endline sstr
open Cmdliner
let term =
let open Term in
const run $ Vif_meta.setup
let cmd =
let doc = "vif" in
let man = [] in
let info = Cmd.info "vif" ~doc ~man in
Cmd.v info term
let () = Cmd.(exit @@ eval cmd)