(*
 * Copyright (c) 2009-2013, Monoidics ltd.
 * Copyright (c) 2013-present, Facebook, Inc.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 *)

open! IStd

(** Printers for the analysis results *)

(** Module to read specific lines from files.
    The data from any file will stay in memory until the handle is collected by the gc *)
module LineReader : sig
  type t

  val create : unit -> t
  (** create a line reader *)

  val from_file_linenum : t -> SourceFile.t -> int -> string option
  (** get the line from a source file and line number *)

  val from_loc : t -> Location.t -> string option
  (** get the line from a location looking for the copy of the file in the results dir *)
end

val curr_html_formatter : Format.formatter ref
(** Current html formatter *)

val force_delayed_prints : unit -> unit
(** Execute the delayed print actions *)

val node_finish_session : Procdesc.Node.t -> unit
(** Finish a session, and perform delayed print actions if required *)

val node_start_session : pp_name:(Format.formatter -> unit) -> Procdesc.Node.t -> int -> unit
(** Start a session, and create a new html fine for the node if it does not exist yet *)

val write_proc_html : Procdesc.t -> unit
(** Write html file for the procedure. *)

val write_all_html_files : SourceFile.t -> unit
(** Create filename.ext.html for each file in the cluster. *)
