Ocaml_parsing.LocationSourceSource code locations (ranges of positions), used in parsetree.
Warning: this module is unstable and part of compiler-libs.
type t = Ocaml_utils.Warnings.loc = {loc_start : Lexing.position;loc_end : Lexing.position;loc_ghost : bool;}Note on the use of Lexing.position in this module. If pos_fname = "", then use !input_name instead. If pos_lnum = -1, then pos_bol = 0. Use pos_cnum and re-parse the file to get the line and character numbers. Else all fields are correct.
Strict comparison: Compares all fields of the two locations, irrespective of whether or not they happen to refer to the same place. For fully-defined locations within the same file, is guaranteed to return them in source order; otherwise, or if given two locations that differ only in ghostiness, is just guaranteed to produce a consistent order, but which one is unspecified.
Set the file name and line number of the lexbuf to be the start of the named file.
Get the location of the current token from the lexbuf.
rhs_loc n returns the location of the symbol at position n, starting at 1, in the current parser rule.
file, line, char
merge locs returns the location covering all locations from locs. It raises if locs is empty, and the result only makes sense if all the locations are from the same file. If ~ghost:false is passed, the result location will only be ghost if one of the input locations was ghost. The default is ~ghost:true, which causes the result location to be ghost no matter what
rewrite_absolute_path path rewrites path to honor the BUILD_PATH_PREFIX_MAP variable if it is set. It does not check whether path is absolute or not. The result is as follows:
path.path).rewrite_find_first_existing path uses a BUILD_PATH_PREFIX_MAP mapping and tries to find a source in mapping that maps to a result that exists in the file system. There are the following return values:
None, means either
path does not exists, orpath in the mapping were found,Some target, means target exists and either
target = path, ortarget is the first file (in priority order) that path mapped to that exists in the file system.Not_found raised, means some source prefixes in the map were found that matched path, but none of them existed in the file system. The caller should catch this and issue an appropriate error message.See the BUILD_PATH_PREFIX_MAP spec
rewrite_find_all_existing_dirs dir accumulates a list of existing directories, dirs, that are the result of mapping a potentially abstract directory, dir, over all the mapping pairs in the BUILD_PATH_PREFIX_MAP environment variable, if any. The list dirs will be in priority order (head as highest priority).
The possible results are:
[], means either
dir is not an existing directory, ordir.Some dirs, means dirs are the directories found. Either
dirs = [dir], ordirs are the mapped existing directories.dir, but none of mapping results were existing directories (possibly due to misconfiguration). The caller should catch this and issue an appropriate error message.See the BUILD_PATH_PREFIX_MAP spec
absolute_path path first makes an absolute path, s from path, prepending the current working directory if path was relative. Then s is rewritten using rewrite_absolute_path. Finally the result is normalized by eliminating instances of '.' or '..'.
In -absname mode, return the absolute path for this filename. Otherwise, returns the filename unchanged.
type report_printer = {pp : report_printer -> Format.formatter -> report -> unit;pp_report_kind : report_printer ->
report ->
Format.formatter ->
report_kind ->
unit;pp_main_loc : report_printer -> report -> Format.formatter -> t -> unit;pp_main_txt : report_printer ->
report ->
Format.formatter ->
Ocaml_utils.Format_doc.t ->
unit;pp_submsgs : report_printer -> report -> Format.formatter -> msg list -> unit;pp_submsg : report_printer -> report -> Format.formatter -> msg -> unit;pp_submsg_loc : report_printer -> report -> Format.formatter -> t -> unit;pp_submsg_txt : report_printer ->
report ->
Format.formatter ->
Ocaml_utils.Format_doc.t ->
unit;}A printer for reports, defined using open-recursion. The goal is to make it easy to define new printers by re-using code from existing ones.
reportDisplay an error or warning report.
Hook for redefining the printer of reports.
The hook is a unit -> report_printer and not simply a report_printer: this is useful so that it can detect the type of the output (a file, a terminal, ...) and select a printer accordingly.
Original report printer for use in hooks.
Warnings.t into a reportreport_warning loc w produces a report for the given warning w, or None if the warning is not to be printed.
Hook for intercepting warnings.
Original warning reporter for use in hooks.
Prints a warning. This is simply the composition of report_warning and print_report.
Same as print_warning, but uses !formatter_for_warnings as output formatter.
Alert.t into a reportreport_alert loc w produces a report for the given alert w, or None if the alert is not to be printed.
Hook for intercepting alerts.
Original alert reporter for use in hooks.
Prints an alert. This is simply the composition of report_alert and print_report.
Same as print_alert, but uses !formatter_for_warnings as output formatter.
Prints an alert that -I +lib has been automatically added to the load path
deprecated_script_alert command prints an alert that command foo has been deprecated in favour of command ./foo
val errorf :
?loc:t ->
?sub:msg list ->
?source:error_source ->
('a, Ocaml_utils.Format_doc.formatter, unit, error) format4 ->
'aval error_of_printer :
?loc:t ->
?sub:msg list ->
?source:error_source ->
(Ocaml_utils.Format_doc.formatter -> 'a -> unit) ->
'a ->
errorval error_of_printer_file :
?source:error_source ->
(Ocaml_utils.Format_doc.formatter -> 'a -> unit) ->
'a ->
errorEach compiler module which defines a custom type of exception which can surface as a user-visible error should register a "printer" for this exception using register_error_of_exn. The result of the printer is an error value containing a location, a message, and optionally sub-messages (each of them being located as well).
Raising Error e signals an error e; the exception will be caught and the error will be printed.
Raising Already_displayed_error signals an error which has already been printed. The exception will be caught, but nothing will be printed
val raise_errorf :
?loc:t ->
?sub:msg list ->
?source:error_source ->
('a, Ocaml_utils.Format_doc.formatter, unit, 'b) format4 ->
'aReraise the exception if it is unknown.