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
45
46
47
48
49
include Asai.Range
let pp_located pp_arg fmt (x : 'a located) =
pp_arg fmt x.value
let map f node = {node with value = f node.value}
type string_source = Asai.Range.string_source = {
title: string option;
content: string;
}
[@@deriving repr]
type source = [
| `File of string
| `String of string_source
]
[@@deriving repr]
type position = Asai.Range.position = {
source: source;
offset: int;
start_of_line: int;
line_num: int;
}
[@@deriving repr]
let t : t Repr.t =
let open Repr in
variant
"t"
begin
fun range end_of_file t ->
match view t with
| `Range (x, y) -> range (x, y)
| `End_of_file x -> end_of_file x
end
|~ case1 "Range" (pair position_t position_t) make
|~ case1 "End_of_file" position_t eof
|> sealv
type 'a located = 'a Asai.Range.located = {loc: t option; value: 'a}
[@@deriving repr]