blob: f0e4ca04b268671f53a185a40569d4bf77211123 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
(** Meta data like code spans *)
(** A line location *)
type loc = {
line : int; (** The (1-based) line number. *)
col : int; (** The (0-based) column offset. *)
}
[@@deriving show]
type file_name =
| Virtual of string (** A remapped path (namely paths into stdlib) *)
| Local of string
(** A local path (a file coming from the current crate for instance) *)
[@@deriving show]
(** Span data *)
type span = { file : file_name; beg_loc : loc; end_loc : loc } [@@deriving show]
type meta = {
span : span;
(** The source code span.
If this meta information is for a statement/terminator coming from a macro
expansion/inlining/etc., this span is (in case of macros) for the macro
before expansion (i.e., the location the code where the user wrote the call
to the macro).
Ex:
{[
// Below, we consider the spans for the statements inside `test`
// the statement we consider, which gets inlined in `test`
VV
macro_rules! macro { ... st ... } // `generated_from_span` refers to this location
fn test() {
macro!(); // <-- `span` refers to this location
}
]}
*)
generated_from_span : span option;
(** Where the code actually comes from, in case of macro expansion/inlining/etc. *)
}
[@@deriving show]
|