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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
module R = Resolver
module Sc = R.Scope
module Message = Reporter_message
include Asai.StructuredReporter.Make(Message)
type diagnostic = Message.t Asai.Diagnostic.t
let log pp s =
Logs.info (fun m -> m "%a...@." pp s)
let profile msg body =
let before = Unix.gettimeofday () in
let result = body () in
let after = Unix.gettimeofday () in
emit ~extra_remarks: [Asai.Diagnostic.loctextf "%s" msg] (Profiling (after, before));
result
module Tty = Asai.Tty.Make(Message)
let easy_run k =
let fatal diagnostics =
Tty.display diagnostics;
exit 1
in
run ~emit: Tty.display ~fatal k
let silence k =
let fatal diagnostics =
Tty.display diagnostics;
exit 1
in
run ~emit: Tty.display ~fatal k
let test_run k =
let fatal diagnostics =
Tty.display
~use_color: false
~use_ansi: false
diagnostics;
exit 1
in
let emit _diagnostics = () in
run ~emit ~fatal k
let guess_uri (d : diagnostic) =
match d with
| {explanation; _} ->
match explanation.loc with
| None -> None
| Some loc ->
match Range.view loc with
| `End_of_file {source; _}
| `Range ({source; _}, _) ->
match source with
| `String _ -> None
| `File path ->
if path <> "" then
Some (Lsp.Uri.of_path path)
else None
let ignore =
let emit _ = () in
let fatal _ = fatal Message.Internal_error ~extra_remarks: [Asai.Diagnostic.loctext "ignoring error"] in
run ~emit ~fatal