2020-05-25 18:48:02 +03:00
|
|
|
(* This file is part of the Catala compiler, a specification language for tax
|
|
|
|
and social benefits computation rules. Copyright (C) 2020 Inria, contributor:
|
|
|
|
Denis Merigoux <denis.merigoux@inria.fr>
|
|
|
|
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
|
|
|
use this file except in compliance with the License. You may obtain a copy of
|
|
|
|
the License at
|
|
|
|
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
|
|
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
|
|
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
|
|
License for the specific language governing permissions and limitations under
|
|
|
|
the License. *)
|
|
|
|
|
|
|
|
(** Source code position *)
|
|
|
|
|
2022-02-18 17:54:40 +03:00
|
|
|
type t
|
2020-05-25 18:48:02 +03:00
|
|
|
(** A position in the source code is a file, as well as begin and end location
|
|
|
|
of the form col:line *)
|
|
|
|
|
|
|
|
(**{2 Constructor and getters}*)
|
|
|
|
|
2021-01-20 17:37:20 +03:00
|
|
|
val from_lpos : Lexing.position * Lexing.position -> t
|
2020-05-25 18:48:02 +03:00
|
|
|
val from_info : string -> int -> int -> int -> int -> t
|
2021-01-20 21:19:17 +03:00
|
|
|
val overwrite_law_info : t -> string list -> t
|
2021-04-03 18:58:31 +03:00
|
|
|
val get_law_info : t -> string list
|
2020-05-25 18:48:02 +03:00
|
|
|
val get_start_line : t -> int
|
|
|
|
val get_start_column : t -> int
|
|
|
|
val get_end_line : t -> int
|
|
|
|
val get_end_column : t -> int
|
|
|
|
val get_file : t -> string
|
|
|
|
|
2023-02-28 16:40:05 +03:00
|
|
|
val join : t -> t -> t
|
2023-06-02 18:17:45 +03:00
|
|
|
(** Returns the smallest range including both supplied ranges.
|
|
|
|
|
|
|
|
@raise Invalid_argument
|
|
|
|
if they don't belong to the same file. The law position used is the one of
|
|
|
|
the earliest position. *)
|
2023-02-28 16:40:05 +03:00
|
|
|
|
2024-07-17 15:18:32 +03:00
|
|
|
module Map : Map.S with type key = t
|
|
|
|
|
2020-05-25 18:48:02 +03:00
|
|
|
(**{2 Formatters}*)
|
|
|
|
|
|
|
|
val to_string : t -> string
|
|
|
|
(** Formats a position like this:
|
|
|
|
|
|
|
|
{v in file <file>, from <start_line>:<start_col> to <end_line>:<end_col> v} *)
|
|
|
|
|
|
|
|
val to_string_short : t -> string
|
|
|
|
(** Formats a position like this:
|
|
|
|
|
2023-05-04 19:28:24 +03:00
|
|
|
{v <file>;<start_line>:<start_col>--<end_line>:<end_col> v}
|
|
|
|
|
|
|
|
This function is compliant with the
|
|
|
|
{{:https://www.gnu.org/prep/standards/standards.html#Errors} GNU coding
|
|
|
|
standards}. *)
|
2020-05-25 18:48:02 +03:00
|
|
|
|
2024-08-20 16:39:11 +03:00
|
|
|
val to_string_shorter : t -> string
|
|
|
|
(** Like [to_string_short], but skips directory names and extension *)
|
|
|
|
|
2023-06-07 19:10:50 +03:00
|
|
|
val format_loc_text : Format.formatter -> t -> unit
|
2020-05-25 18:48:02 +03:00
|
|
|
(** Open the file corresponding to the position and retrieves the text concerned
|
|
|
|
by the position *)
|
|
|
|
|
2024-05-03 13:20:09 +03:00
|
|
|
val format_loc_text_parts :
|
|
|
|
t ->
|
|
|
|
(Format.formatter -> unit)
|
|
|
|
* (Format.formatter -> unit)
|
|
|
|
* (Format.formatter -> unit) option
|
|
|
|
(** Like [format_loc_text], but returns the printing functions in 3 separate
|
|
|
|
parts: the file name header, the line context, and the law headers *)
|
|
|
|
|
2020-05-25 18:48:02 +03:00
|
|
|
val no_pos : t
|
|
|
|
(** Placeholder position *)
|
2024-06-18 16:10:29 +03:00
|
|
|
|
|
|
|
(**/**)
|
|
|
|
|
|
|
|
val pad_fmt : int -> string -> Format.formatter -> unit
|
|
|
|
(** Exported as [Message.pad] *)
|