diff --git a/lib/dot_of_tast.ml b/lib/dot_of_tast.ml index a123df6..3a7a7ae 100644 --- a/lib/dot_of_tast.ml +++ b/lib/dot_of_tast.ml @@ -68,7 +68,7 @@ let str_of_primary_value (exp : Typedtree.expression) = | Texp_ifthenelse (_, _, None) -> Fmt.str "if/then" | _ -> "????" -let dot_of_impl (s : Typedtree.structure) : unit = +let graph_of_impl (s : Typedtree.structure) : G.t = let g = G.create () in let iterator = { @@ -104,9 +104,10 @@ let dot_of_impl (s : Typedtree.structure) : unit = in iterator.structure iterator s; Log.info (fun m -> - m "dot_of_impl fprint_graph:@ %a" Dot.fprint_graph g) + m "g_of_impl fprint_graph:@ %a" Dot.fprint_graph g); + g -let merlin_parse str : unit = +let merlin_parse str : G.t = let config, _command_args = Mconfig.parse_arguments ~wd:(Sys.getcwd ()) ~warning:(fun _ -> ()) @@ -127,5 +128,12 @@ let merlin_parse str : unit = (Untypeast.untype_structure t)); Log.info (fun m -> m "Printtyped:@ %a" Ocaml_typing.Printtyped.implementation t); - dot_of_impl t - | `Interface _ -> () + graph_of_impl t + | `Interface _ -> G.create () + +let dot_of_tast ?(fname = "x.dot") str : unit = + let oc = open_out fname in + F.pf + (Format.formatter_of_out_channel oc) + "%a" Dot.fprint_graph (merlin_parse str); + close_out oc diff --git a/lib/dot_of_tast.mli b/lib/dot_of_tast.mli index 70d2ec1..3dad9f1 100644 --- a/lib/dot_of_tast.mli +++ b/lib/dot_of_tast.mli @@ -1 +1 @@ -val merlin_parse : string -> unit +val dot_of_tast : ?fname:string -> string -> unit