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
module Location = Migrate_ast.Location
open Extended_ast
include Non_overlapping_interval_tree.Make (Location)
(** Use Ast_mapper to collect all locs in ast, and create tree of them. *)
let of_ast fragment ast =
let attribute (m : Ast_mapper.mapper) attr =
if Ast.Attr.is_doc attr then attr
else Ast_mapper.default_mapper.attribute m attr
in
let locs = ref [] in
let location _ loc =
locs := loc :: !locs ;
loc
in
let arg_label _ lbl = lbl in
let mapper =
Ast_mapper.{default_mapper with location; attribute; arg_label}
in
map fragment mapper ast |> ignore ;
(of_list !locs, !locs)