moonpool/dev/ocaml/Location/index.html
2023-08-28 17:11:38 +00:00

42 lines
No EOL
40 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Location (ocaml.Location)</title><link rel="stylesheet" href="../../_odoc-theme/odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 2.2.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="../index.html">Up</a> <a href="../index.html">ocaml</a> &#x00BB; Location</nav><header class="odoc-preamble"><h1>Module <code><span>Location</span></code></h1><p>Source code locations (ranges of positions), used in parsetree.</p><p><b>Warning:</b> this module is unstable and part of <span class="xref-unresolved">compiler-libs</span>.</p></header><nav class="odoc-toc"><ul><li><a href="#input-info">Input info</a></li><li><a href="#toplevel-specific-functions">Toplevel-specific functions</a></li><li><a href="#printing-locations">Printing locations</a></li><li><a href="#toplevel-specific-location-highlighting">Toplevel-specific location highlighting</a></li><li><a href="#reporting-errors-and-warnings">Reporting errors and warnings</a><ul><li><a href="#the-type-of-reports-and-report-printers">The type of reports and report printers</a></li><li><a href="#report-printers-used-in-the-compiler">Report printers used in the compiler</a></li><li><a href="#printing-a-report">Printing a <code>report</code></a></li></ul></li><li><a href="#reporting-warnings">Reporting warnings</a><ul><li><a href="#converting-a-warnings.t-into-a-report">Converting a <code>Warnings.t</code> into a <code>report</code></a></li><li><a href="#printing-warnings">Printing warnings</a></li></ul></li><li><a href="#reporting-alerts">Reporting alerts</a><ul><li><a href="#converting-an-alert.t-into-a-report">Converting an <code>Alert.t</code> into a <code>report</code></a></li><li><a href="#printing-alerts">Printing alerts</a></li></ul></li><li><a href="#reporting-errors">Reporting errors</a></li><li><a href="#automatically-reporting-errors-for-raised-exceptions">Automatically reporting errors for raised exceptions</a></li></ul></nav><div class="odoc-content"><div class="odoc-spec"><div class="spec type anchored" id="type-t"><a href="#type-t" class="anchor"></a><code><span><span class="keyword">type</span> t</span><span> = <a href="../Warnings/index.html#type-loc">Warnings.loc</a></span><span> = </span><span>{</span></code><ol><li id="type-t.loc_start" class="def record field anchored"><a href="#type-t.loc_start" class="anchor"></a><code><span>loc_start : <a href="../Stdlib/Lexing/index.html#type-position">Stdlib.Lexing.position</a>;</span></code></li><li id="type-t.loc_end" class="def record field anchored"><a href="#type-t.loc_end" class="anchor"></a><code><span>loc_end : <a href="../Stdlib/Lexing/index.html#type-position">Stdlib.Lexing.position</a>;</span></code></li><li id="type-t.loc_ghost" class="def record field anchored"><a href="#type-t.loc_ghost" class="anchor"></a><code><span>loc_ghost : bool;</span></code></li></ol><code><span>}</span></code></div></div><p>Note on the use of Lexing.position in this module. If <code>pos_fname = &quot;&quot;</code>, then use <code>!input_name</code> instead. If <code>pos_lnum = -1</code>, then <code>pos_bol = 0</code>. Use <code>pos_cnum</code> and re-parse the file to get the line and character numbers. Else all fields are correct.</p><div class="odoc-spec"><div class="spec value anchored" id="val-none"><a href="#val-none" class="anchor"></a><code><span><span class="keyword">val</span> none : <a href="#type-t">t</a></span></code></div><div class="spec-doc"><p>An arbitrary value of type <code>t</code>; describes an empty ghost range.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-is_none"><a href="#val-is_none" class="anchor"></a><code><span><span class="keyword">val</span> is_none : <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> bool</span></code></div><div class="spec-doc"><p>True for <code>Location.none</code>, false any other location</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-in_file"><a href="#val-in_file" class="anchor"></a><code><span><span class="keyword">val</span> in_file : <span>string <span class="arrow">&#45;&gt;</span></span> <a href="#type-t">t</a></span></code></div><div class="spec-doc"><p>Return an empty ghost range located in a given file.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-init"><a href="#val-init" class="anchor"></a><code><span><span class="keyword">val</span> init : <span><a href="../Stdlib/Lexing/index.html#type-lexbuf">Stdlib.Lexing.lexbuf</a> <span class="arrow">&#45;&gt;</span></span> <span>string <span class="arrow">&#45;&gt;</span></span> unit</span></code></div><div class="spec-doc"><p>Set the file name and line number of the <code>lexbuf</code> to be the start of the named file.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-curr"><a href="#val-curr" class="anchor"></a><code><span><span class="keyword">val</span> curr : <span><a href="../Stdlib/Lexing/index.html#type-lexbuf">Stdlib.Lexing.lexbuf</a> <span class="arrow">&#45;&gt;</span></span> <a href="#type-t">t</a></span></code></div><div class="spec-doc"><p>Get the location of the current token from the <code>lexbuf</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-symbol_rloc"><a href="#val-symbol_rloc" class="anchor"></a><code><span><span class="keyword">val</span> symbol_rloc : <span>unit <span class="arrow">&#45;&gt;</span></span> <a href="#type-t">t</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-symbol_gloc"><a href="#val-symbol_gloc" class="anchor"></a><code><span><span class="keyword">val</span> symbol_gloc : <span>unit <span class="arrow">&#45;&gt;</span></span> <a href="#type-t">t</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-rhs_loc"><a href="#val-rhs_loc" class="anchor"></a><code><span><span class="keyword">val</span> rhs_loc : <span>int <span class="arrow">&#45;&gt;</span></span> <a href="#type-t">t</a></span></code></div><div class="spec-doc"><p><code>rhs_loc n</code> returns the location of the symbol at position <code>n</code>, starting at 1, in the current parser rule.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-rhs_interval"><a href="#val-rhs_interval" class="anchor"></a><code><span><span class="keyword">val</span> rhs_interval : <span>int <span class="arrow">&#45;&gt;</span></span> <span>int <span class="arrow">&#45;&gt;</span></span> <a href="#type-t">t</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-get_pos_info"><a href="#val-get_pos_info" class="anchor"></a><code><span><span class="keyword">val</span> get_pos_info : <span><a href="../Stdlib/Lexing/index.html#type-position">Stdlib.Lexing.position</a> <span class="arrow">&#45;&gt;</span></span> string * int * int</span></code></div><div class="spec-doc"><p>file, line, char</p></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-loc"><a href="#type-loc" class="anchor"></a><code><span><span class="keyword">type</span> <span>'a loc</span></span><span> = </span><span>{</span></code><ol><li id="type-loc.txt" class="def record field anchored"><a href="#type-loc.txt" class="anchor"></a><code><span>txt : <span class="type-var">'a</span>;</span></code></li><li id="type-loc.loc" class="def record field anchored"><a href="#type-loc.loc" class="anchor"></a><code><span>loc : <a href="#type-t">t</a>;</span></code></li></ol><code><span>}</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-mknoloc"><a href="#val-mknoloc" class="anchor"></a><code><span><span class="keyword">val</span> mknoloc : <span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <a href="#type-loc">loc</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-mkloc"><a href="#val-mkloc" class="anchor"></a><code><span><span class="keyword">val</span> mkloc : <span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <a href="#type-loc">loc</a></span></span></code></div></div><h2 id="input-info"><a href="#input-info" class="anchor"></a>Input info</h2><div class="odoc-spec"><div class="spec value anchored" id="val-input_name"><a href="#val-input_name" class="anchor"></a><code><span><span class="keyword">val</span> input_name : <span>string <a href="../Stdlib/index.html#type-ref">ref</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-input_lexbuf"><a href="#val-input_lexbuf" class="anchor"></a><code><span><span class="keyword">val</span> input_lexbuf : <span><span><a href="../Stdlib/Lexing/index.html#type-lexbuf">Stdlib.Lexing.lexbuf</a> option</span> <a href="../Stdlib/index.html#type-ref">ref</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-input_phrase_buffer"><a href="#val-input_phrase_buffer" class="anchor"></a><code><span><span class="keyword">val</span> input_phrase_buffer : <span><span><a href="../Stdlib/Buffer/index.html#type-t">Stdlib.Buffer.t</a> option</span> <a href="../Stdlib/index.html#type-ref">ref</a></span></span></code></div></div><h2 id="toplevel-specific-functions"><a href="#toplevel-specific-functions" class="anchor"></a>Toplevel-specific functions</h2><div class="odoc-spec"><div class="spec value anchored" id="val-echo_eof"><a href="#val-echo_eof" class="anchor"></a><code><span><span class="keyword">val</span> echo_eof : <span>unit <span class="arrow">&#45;&gt;</span></span> unit</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-reset"><a href="#val-reset" class="anchor"></a><code><span><span class="keyword">val</span> reset : <span>unit <span class="arrow">&#45;&gt;</span></span> unit</span></code></div></div><h2 id="printing-locations"><a href="#printing-locations" class="anchor"></a>Printing locations</h2><div class="odoc-spec"><div class="spec value anchored" id="val-rewrite_absolute_path"><a href="#val-rewrite_absolute_path" class="anchor"></a><code><span><span class="keyword">val</span> rewrite_absolute_path : <span>string <span class="arrow">&#45;&gt;</span></span> string</span></code></div><div class="spec-doc"><p>rewrite absolute path to honor the BUILD_PATH_PREFIX_MAP variable (https://reproducible-builds.org/specs/build-path-prefix-map/) if it is set.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-absolute_path"><a href="#val-absolute_path" class="anchor"></a><code><span><span class="keyword">val</span> absolute_path : <span>string <span class="arrow">&#45;&gt;</span></span> string</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-show_filename"><a href="#val-show_filename" class="anchor"></a><code><span><span class="keyword">val</span> show_filename : <span>string <span class="arrow">&#45;&gt;</span></span> string</span></code></div><div class="spec-doc"><p>In -absname mode, return the absolute path for this filename. Otherwise, returns the filename unchanged.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-print_filename"><a href="#val-print_filename" class="anchor"></a><code><span><span class="keyword">val</span> print_filename : <span><a href="../Stdlib/Format/index.html#type-formatter">Stdlib.Format.formatter</a> <span class="arrow">&#45;&gt;</span></span> <span>string <span class="arrow">&#45;&gt;</span></span> unit</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-print_loc"><a href="#val-print_loc" class="anchor"></a><code><span><span class="keyword">val</span> print_loc : <span><a href="../Stdlib/Format/index.html#type-formatter">Stdlib.Format.formatter</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-print_locs"><a href="#val-print_locs" class="anchor"></a><code><span><span class="keyword">val</span> print_locs : <span><a href="../Stdlib/Format/index.html#type-formatter">Stdlib.Format.formatter</a> <span class="arrow">&#45;&gt;</span></span> <span><span><a href="#type-t">t</a> list</span> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div></div><h2 id="toplevel-specific-location-highlighting"><a href="#toplevel-specific-location-highlighting" class="anchor"></a>Toplevel-specific location highlighting</h2><div class="odoc-spec"><div class="spec value anchored" id="val-highlight_terminfo"><a href="#val-highlight_terminfo" class="anchor"></a><code><span><span class="keyword">val</span> highlight_terminfo :
<span><a href="../Stdlib/Lexing/index.html#type-lexbuf">Stdlib.Lexing.lexbuf</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../Stdlib/Format/index.html#type-formatter">Stdlib.Format.formatter</a> <span class="arrow">&#45;&gt;</span></span>
<span><span><a href="#type-t">t</a> list</span> <span class="arrow">&#45;&gt;</span></span>
unit</span></code></div></div><h2 id="reporting-errors-and-warnings"><a href="#reporting-errors-and-warnings" class="anchor"></a>Reporting errors and warnings</h2><h3 id="the-type-of-reports-and-report-printers"><a href="#the-type-of-reports-and-report-printers" class="anchor"></a>The type of reports and report printers</h3><div class="odoc-spec"><div class="spec type anchored" id="type-msg"><a href="#type-msg" class="anchor"></a><code><span><span class="keyword">type</span> msg</span><span> = <span><span>(<span><a href="../Stdlib/Format/index.html#type-formatter">Stdlib.Format.formatter</a> <span class="arrow">&#45;&gt;</span></span> unit)</span> <a href="#type-loc">loc</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-msg"><a href="#val-msg" class="anchor"></a><code><span><span class="keyword">val</span> msg : <span>?loc:<a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span><span><span>(<span class="type-var">'a</span>, <a href="../Stdlib/Format/index.html#type-formatter">Stdlib.Format.formatter</a>, unit, <a href="#type-msg">msg</a>)</span> <a href="../Stdlib/index.html#type-format4">format4</a></span> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'a</span></span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-report_kind"><a href="#type-report_kind" class="anchor"></a><code><span><span class="keyword">type</span> report_kind</span><span> = </span></code><ol><li id="type-report_kind.Report_error" class="def variant constructor anchored"><a href="#type-report_kind.Report_error" class="anchor"></a><code><span>| </span><span><span class="constructor">Report_error</span></span></code></li><li id="type-report_kind.Report_warning" class="def variant constructor anchored"><a href="#type-report_kind.Report_warning" class="anchor"></a><code><span>| </span><span><span class="constructor">Report_warning</span> <span class="keyword">of</span> string</span></code></li><li id="type-report_kind.Report_warning_as_error" class="def variant constructor anchored"><a href="#type-report_kind.Report_warning_as_error" class="anchor"></a><code><span>| </span><span><span class="constructor">Report_warning_as_error</span> <span class="keyword">of</span> string</span></code></li><li id="type-report_kind.Report_alert" class="def variant constructor anchored"><a href="#type-report_kind.Report_alert" class="anchor"></a><code><span>| </span><span><span class="constructor">Report_alert</span> <span class="keyword">of</span> string</span></code></li><li id="type-report_kind.Report_alert_as_error" class="def variant constructor anchored"><a href="#type-report_kind.Report_alert_as_error" class="anchor"></a><code><span>| </span><span><span class="constructor">Report_alert_as_error</span> <span class="keyword">of</span> string</span></code></li></ol></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-report"><a href="#type-report" class="anchor"></a><code><span><span class="keyword">type</span> report</span><span> = </span><span>{</span></code><ol><li id="type-report.kind" class="def record field anchored"><a href="#type-report.kind" class="anchor"></a><code><span>kind : <a href="#type-report_kind">report_kind</a>;</span></code></li><li id="type-report.main" class="def record field anchored"><a href="#type-report.main" class="anchor"></a><code><span>main : <a href="#type-msg">msg</a>;</span></code></li><li id="type-report.sub" class="def record field anchored"><a href="#type-report.sub" class="anchor"></a><code><span>sub : <span><a href="#type-msg">msg</a> list</span>;</span></code></li></ol><code><span>}</span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-report_printer"><a href="#type-report_printer" class="anchor"></a><code><span><span class="keyword">type</span> report_printer</span><span> = </span><span>{</span></code><ol><li id="type-report_printer.pp" class="def record field anchored"><a href="#type-report_printer.pp" class="anchor"></a><code><span>pp : <span><a href="#type-report_printer">report_printer</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="../Stdlib/Format/index.html#type-formatter">Stdlib.Format.formatter</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-report">report</a> <span class="arrow">&#45;&gt;</span></span> unit;</span></code></li><li id="type-report_printer.pp_report_kind" class="def record field anchored"><a href="#type-report_printer.pp_report_kind" class="anchor"></a><code><span>pp_report_kind : <span><a href="#type-report_printer">report_printer</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="#type-report">report</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../Stdlib/Format/index.html#type-formatter">Stdlib.Format.formatter</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="#type-report_kind">report_kind</a> <span class="arrow">&#45;&gt;</span></span>
unit;</span></code></li><li id="type-report_printer.pp_main_loc" class="def record field anchored"><a href="#type-report_printer.pp_main_loc" class="anchor"></a><code><span>pp_main_loc : <span><a href="#type-report_printer">report_printer</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-report">report</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="../Stdlib/Format/index.html#type-formatter">Stdlib.Format.formatter</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> unit;</span></code></li><li id="type-report_printer.pp_main_txt" class="def record field anchored"><a href="#type-report_printer.pp_main_txt" class="anchor"></a><code><span>pp_main_txt : <span><a href="#type-report_printer">report_printer</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="#type-report">report</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../Stdlib/Format/index.html#type-formatter">Stdlib.Format.formatter</a> <span class="arrow">&#45;&gt;</span></span>
<span><span>(<span><a href="../Stdlib/Format/index.html#type-formatter">Stdlib.Format.formatter</a> <span class="arrow">&#45;&gt;</span></span> unit)</span> <span class="arrow">&#45;&gt;</span></span>
unit;</span></code></li><li id="type-report_printer.pp_submsgs" class="def record field anchored"><a href="#type-report_printer.pp_submsgs" class="anchor"></a><code><span>pp_submsgs : <span><a href="#type-report_printer">report_printer</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="#type-report">report</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../Stdlib/Format/index.html#type-formatter">Stdlib.Format.formatter</a> <span class="arrow">&#45;&gt;</span></span>
<span><span><a href="#type-msg">msg</a> list</span> <span class="arrow">&#45;&gt;</span></span>
unit;</span></code></li><li id="type-report_printer.pp_submsg" class="def record field anchored"><a href="#type-report_printer.pp_submsg" class="anchor"></a><code><span>pp_submsg : <span><a href="#type-report_printer">report_printer</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-report">report</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="../Stdlib/Format/index.html#type-formatter">Stdlib.Format.formatter</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-msg">msg</a> <span class="arrow">&#45;&gt;</span></span> unit;</span></code></li><li id="type-report_printer.pp_submsg_loc" class="def record field anchored"><a href="#type-report_printer.pp_submsg_loc" class="anchor"></a><code><span>pp_submsg_loc : <span><a href="#type-report_printer">report_printer</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="#type-report">report</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../Stdlib/Format/index.html#type-formatter">Stdlib.Format.formatter</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span>
unit;</span></code></li><li id="type-report_printer.pp_submsg_txt" class="def record field anchored"><a href="#type-report_printer.pp_submsg_txt" class="anchor"></a><code><span>pp_submsg_txt : <span><a href="#type-report_printer">report_printer</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="#type-report">report</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="../Stdlib/Format/index.html#type-formatter">Stdlib.Format.formatter</a> <span class="arrow">&#45;&gt;</span></span>
<span><span>(<span><a href="../Stdlib/Format/index.html#type-formatter">Stdlib.Format.formatter</a> <span class="arrow">&#45;&gt;</span></span> unit)</span> <span class="arrow">&#45;&gt;</span></span>
unit;</span></code></li></ol><code><span>}</span></code></div><div class="spec-doc"><p>A printer for <code>report</code>s, defined using open-recursion. The goal is to make it easy to define new printers by re-using code from existing ones.</p></div></div><h3 id="report-printers-used-in-the-compiler"><a href="#report-printers-used-in-the-compiler" class="anchor"></a>Report printers used in the compiler</h3><div class="odoc-spec"><div class="spec value anchored" id="val-batch_mode_printer"><a href="#val-batch_mode_printer" class="anchor"></a><code><span><span class="keyword">val</span> batch_mode_printer : <a href="#type-report_printer">report_printer</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-terminfo_toplevel_printer"><a href="#val-terminfo_toplevel_printer" class="anchor"></a><code><span><span class="keyword">val</span> terminfo_toplevel_printer : <span><a href="../Stdlib/Lexing/index.html#type-lexbuf">Stdlib.Lexing.lexbuf</a> <span class="arrow">&#45;&gt;</span></span> <a href="#type-report_printer">report_printer</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-best_toplevel_printer"><a href="#val-best_toplevel_printer" class="anchor"></a><code><span><span class="keyword">val</span> best_toplevel_printer : <span>unit <span class="arrow">&#45;&gt;</span></span> <a href="#type-report_printer">report_printer</a></span></code></div><div class="spec-doc"><p>Detects the terminal capabilities and selects an adequate printer</p></div></div><h3 id="printing-a-report"><a href="#printing-a-report" class="anchor"></a>Printing a <code>report</code></h3><div class="odoc-spec"><div class="spec value anchored" id="val-print_report"><a href="#val-print_report" class="anchor"></a><code><span><span class="keyword">val</span> print_report : <span><a href="../Stdlib/Format/index.html#type-formatter">Stdlib.Format.formatter</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-report">report</a> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div><div class="spec-doc"><p>Display an error or warning report.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-report_printer"><a href="#val-report_printer" class="anchor"></a><code><span><span class="keyword">val</span> report_printer : <span><span>(<span>unit <span class="arrow">&#45;&gt;</span></span> <a href="#type-report_printer">report_printer</a>)</span> <a href="../Stdlib/index.html#type-ref">ref</a></span></span></code></div><div class="spec-doc"><p>Hook for redefining the printer of reports.</p><p>The hook is a <code>unit -&gt; report_printer</code> and not simply a <code>report_printer</code>: this is useful so that it can detect the type of the output (a file, a terminal, ...) and select a printer accordingly.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-default_report_printer"><a href="#val-default_report_printer" class="anchor"></a><code><span><span class="keyword">val</span> default_report_printer : <span>unit <span class="arrow">&#45;&gt;</span></span> <a href="#type-report_printer">report_printer</a></span></code></div><div class="spec-doc"><p>Original report printer for use in hooks.</p></div></div><h2 id="reporting-warnings"><a href="#reporting-warnings" class="anchor"></a>Reporting warnings</h2><h3 id="converting-a-warnings.t-into-a-report"><a href="#converting-a-warnings.t-into-a-report" class="anchor"></a>Converting a <code>Warnings.t</code> into a <code>report</code></h3><div class="odoc-spec"><div class="spec value anchored" id="val-report_warning"><a href="#val-report_warning" class="anchor"></a><code><span><span class="keyword">val</span> report_warning : <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="../Warnings/index.html#type-t">Warnings.t</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-report">report</a> option</span></span></code></div><div class="spec-doc"><p><code>report_warning loc w</code> produces a report for the given warning <code>w</code>, or <code>None</code> if the warning is not to be printed.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-warning_reporter"><a href="#val-warning_reporter" class="anchor"></a><code><span><span class="keyword">val</span> warning_reporter : <span><span>(<span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="../Warnings/index.html#type-t">Warnings.t</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-report">report</a> option</span>)</span> <a href="../Stdlib/index.html#type-ref">ref</a></span></span></code></div><div class="spec-doc"><p>Hook for intercepting warnings.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-default_warning_reporter"><a href="#val-default_warning_reporter" class="anchor"></a><code><span><span class="keyword">val</span> default_warning_reporter : <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="../Warnings/index.html#type-t">Warnings.t</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-report">report</a> option</span></span></code></div><div class="spec-doc"><p>Original warning reporter for use in hooks.</p></div></div><h3 id="printing-warnings"><a href="#printing-warnings" class="anchor"></a>Printing warnings</h3><div class="odoc-spec"><div class="spec value anchored" id="val-formatter_for_warnings"><a href="#val-formatter_for_warnings" class="anchor"></a><code><span><span class="keyword">val</span> formatter_for_warnings : <span><a href="../Stdlib/Format/index.html#type-formatter">Stdlib.Format.formatter</a> <a href="../Stdlib/index.html#type-ref">ref</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-print_warning"><a href="#val-print_warning" class="anchor"></a><code><span><span class="keyword">val</span> print_warning : <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="../Stdlib/Format/index.html#type-formatter">Stdlib.Format.formatter</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="../Warnings/index.html#type-t">Warnings.t</a> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div><div class="spec-doc"><p>Prints a warning. This is simply the composition of <code>report_warning</code> and <code>print_report</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-prerr_warning"><a href="#val-prerr_warning" class="anchor"></a><code><span><span class="keyword">val</span> prerr_warning : <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="../Warnings/index.html#type-t">Warnings.t</a> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div><div class="spec-doc"><p>Same as <code>print_warning</code>, but uses <code>!formatter_for_warnings</code> as output formatter.</p></div></div><h2 id="reporting-alerts"><a href="#reporting-alerts" class="anchor"></a>Reporting alerts</h2><h3 id="converting-an-alert.t-into-a-report"><a href="#converting-an-alert.t-into-a-report" class="anchor"></a>Converting an <code>Alert.t</code> into a <code>report</code></h3><div class="odoc-spec"><div class="spec value anchored" id="val-report_alert"><a href="#val-report_alert" class="anchor"></a><code><span><span class="keyword">val</span> report_alert : <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="../Warnings/index.html#type-alert">Warnings.alert</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-report">report</a> option</span></span></code></div><div class="spec-doc"><p><code>report_alert loc w</code> produces a report for the given alert <code>w</code>, or <code>None</code> if the alert is not to be printed.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-alert_reporter"><a href="#val-alert_reporter" class="anchor"></a><code><span><span class="keyword">val</span> alert_reporter : <span><span>(<span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="../Warnings/index.html#type-alert">Warnings.alert</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-report">report</a> option</span>)</span> <a href="../Stdlib/index.html#type-ref">ref</a></span></span></code></div><div class="spec-doc"><p>Hook for intercepting alerts.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-default_alert_reporter"><a href="#val-default_alert_reporter" class="anchor"></a><code><span><span class="keyword">val</span> default_alert_reporter : <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="../Warnings/index.html#type-alert">Warnings.alert</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-report">report</a> option</span></span></code></div><div class="spec-doc"><p>Original alert reporter for use in hooks.</p></div></div><h3 id="printing-alerts"><a href="#printing-alerts" class="anchor"></a>Printing alerts</h3><div class="odoc-spec"><div class="spec value anchored" id="val-print_alert"><a href="#val-print_alert" class="anchor"></a><code><span><span class="keyword">val</span> print_alert : <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="../Stdlib/Format/index.html#type-formatter">Stdlib.Format.formatter</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="../Warnings/index.html#type-alert">Warnings.alert</a> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div><div class="spec-doc"><p>Prints an alert. This is simply the composition of <code>report_alert</code> and <code>print_report</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-prerr_alert"><a href="#val-prerr_alert" class="anchor"></a><code><span><span class="keyword">val</span> prerr_alert : <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="../Warnings/index.html#type-alert">Warnings.alert</a> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div><div class="spec-doc"><p>Same as <code>print_alert</code>, but uses <code>!formatter_for_warnings</code> as output formatter.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-deprecated"><a href="#val-deprecated" class="anchor"></a><code><span><span class="keyword">val</span> deprecated : <span>?def:<a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span>?use:<a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span>string <span class="arrow">&#45;&gt;</span></span> unit</span></code></div><div class="spec-doc"><p>Prints a deprecation alert.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-alert"><a href="#val-alert" class="anchor"></a><code><span><span class="keyword">val</span> alert : <span>?def:<a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span>?use:<a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span>kind:string <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span>string <span class="arrow">&#45;&gt;</span></span> unit</span></code></div><div class="spec-doc"><p>Prints an arbitrary alert.</p></div></div><h2 id="reporting-errors"><a href="#reporting-errors" class="anchor"></a>Reporting errors</h2><div class="odoc-spec"><div class="spec type anchored" id="type-error"><a href="#type-error" class="anchor"></a><code><span><span class="keyword">type</span> error</span><span> = <a href="#type-report">report</a></span></code></div><div class="spec-doc"><p>An <code>error</code> is a <code>report</code> which <code>report_kind</code> must be <code>Report_error</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-error"><a href="#val-error" class="anchor"></a><code><span><span class="keyword">val</span> error : <span>?loc:<a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span>?sub:<span><a href="#type-msg">msg</a> list</span> <span class="arrow">&#45;&gt;</span></span> <span>string <span class="arrow">&#45;&gt;</span></span> <a href="#type-error">error</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-errorf"><a href="#val-errorf" class="anchor"></a><code><span><span class="keyword">val</span> errorf :
<span>?loc:<a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span>
<span>?sub:<span><a href="#type-msg">msg</a> list</span> <span class="arrow">&#45;&gt;</span></span>
<span><span><span>(<span class="type-var">'a</span>, <a href="../Stdlib/Format/index.html#type-formatter">Stdlib.Format.formatter</a>, unit, <a href="#type-error">error</a>)</span> <a href="../Stdlib/index.html#type-format4">format4</a></span> <span class="arrow">&#45;&gt;</span></span>
<span class="type-var">'a</span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-error_of_printer"><a href="#val-error_of_printer" class="anchor"></a><code><span><span class="keyword">val</span> error_of_printer :
<span>?loc:<a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span>
<span>?sub:<span><a href="#type-msg">msg</a> list</span> <span class="arrow">&#45;&gt;</span></span>
<span><span>(<span><a href="../Stdlib/Format/index.html#type-formatter">Stdlib.Format.formatter</a> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> unit)</span> <span class="arrow">&#45;&gt;</span></span>
<span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span>
<a href="#type-error">error</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-error_of_printer_file"><a href="#val-error_of_printer_file" class="anchor"></a><code><span><span class="keyword">val</span> error_of_printer_file :
<span><span>(<span><a href="../Stdlib/Format/index.html#type-formatter">Stdlib.Format.formatter</a> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> unit)</span> <span class="arrow">&#45;&gt;</span></span>
<span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span>
<a href="#type-error">error</a></span></code></div></div><h2 id="automatically-reporting-errors-for-raised-exceptions"><a href="#automatically-reporting-errors-for-raised-exceptions" class="anchor"></a>Automatically reporting errors for raised exceptions</h2><div class="odoc-spec"><div class="spec value anchored" id="val-register_error_of_exn"><a href="#val-register_error_of_exn" class="anchor"></a><code><span><span class="keyword">val</span> register_error_of_exn : <span><span>(<span>exn <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-error">error</a> option</span>)</span> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div><div class="spec-doc"><p>Each compiler module which defines a custom type of exception which can surface as a user-visible error should register a &quot;printer&quot; for this exception using <code>register_error_of_exn</code>. The result of the printer is an <code>error</code> value containing a location, a message, and optionally sub-messages (each of them being located as well).</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-error_of_exn"><a href="#val-error_of_exn" class="anchor"></a><code><span><span class="keyword">val</span> error_of_exn : <span>exn <span class="arrow">&#45;&gt;</span></span> <span><span>[ <span>`Ok of <a href="#type-error">error</a></span> <span>| `Already_displayed</span> ]</span> option</span></span></code></div></div><div class="odoc-spec"><div class="spec exception anchored" id="exception-Error"><a href="#exception-Error" class="anchor"></a><code><span><span class="keyword">exception</span> </span><span><span class="exception">Error</span> <span class="keyword">of</span> <a href="#type-error">error</a></span></code></div><div class="spec-doc"><p>Raising <code>Error e</code> signals an error <code>e</code>; the exception will be caught and the error will be printed.</p></div></div><div class="odoc-spec"><div class="spec exception anchored" id="exception-Already_displayed_error"><a href="#exception-Already_displayed_error" class="anchor"></a><code><span><span class="keyword">exception</span> </span><span><span class="exception">Already_displayed_error</span></span></code></div><div class="spec-doc"><p>Raising <code>Already_displayed_error</code> signals an error which has already been printed. The exception will be caught, but nothing will be printed</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-raise_errorf"><a href="#val-raise_errorf" class="anchor"></a><code><span><span class="keyword">val</span> raise_errorf :
<span>?loc:<a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span>
<span>?sub:<span><a href="#type-msg">msg</a> list</span> <span class="arrow">&#45;&gt;</span></span>
<span><span><span>(<span class="type-var">'a</span>, <a href="../Stdlib/Format/index.html#type-formatter">Stdlib.Format.formatter</a>, unit, <span class="type-var">'b</span>)</span> <a href="../Stdlib/index.html#type-format4">format4</a></span> <span class="arrow">&#45;&gt;</span></span>
<span class="type-var">'a</span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-report_exception"><a href="#val-report_exception" class="anchor"></a><code><span><span class="keyword">val</span> report_exception : <span><a href="../Stdlib/Format/index.html#type-formatter">Stdlib.Format.formatter</a> <span class="arrow">&#45;&gt;</span></span> <span>exn <span class="arrow">&#45;&gt;</span></span> unit</span></code></div><div class="spec-doc"><p>Reraise the exception if it is unknown.</p></div></div></div></body></html>