@@ -41,6 +41,10 @@ let setup ~filename ~forPrinter () =
41
41
let mode = if forPrinter then Res_parser. Default else ParseForTypeChecker in
42
42
Res_parser. make ~mode src filename
43
43
44
+ let setupFromSource ~displayFilename ~source ~forPrinter () =
45
+ let mode = if forPrinter then Res_parser. Default else ParseForTypeChecker in
46
+ Res_parser. make ~mode source displayFilename
47
+
44
48
let parsingEngine =
45
49
{
46
50
parseImplementation =
@@ -82,6 +86,40 @@ let parsingEngine =
82
86
Res_diagnostics. printReport diagnostics source);
83
87
}
84
88
89
+ let parseImplementationFromSource ~forPrinter ~displayFilename ~source =
90
+ let engine = setupFromSource ~display Filename ~source ~for Printer () in
91
+ let structure = Res_core. parseImplementation engine in
92
+ let invalid, diagnostics =
93
+ match engine.diagnostics with
94
+ | [] as diagnostics -> (false , diagnostics)
95
+ | _ as diagnostics -> (true , diagnostics)
96
+ in
97
+ {
98
+ filename = engine.scanner.filename;
99
+ source = engine.scanner.src;
100
+ parsetree = structure;
101
+ diagnostics;
102
+ invalid;
103
+ comments = List. rev engine.comments;
104
+ }
105
+
106
+ let parseInterfaceFromSource ~forPrinter ~displayFilename ~source =
107
+ let engine = setupFromSource ~display Filename ~source ~for Printer () in
108
+ let signature = Res_core. parseSpecification engine in
109
+ let invalid, diagnostics =
110
+ match engine.diagnostics with
111
+ | [] as diagnostics -> (false , diagnostics)
112
+ | _ as diagnostics -> (true , diagnostics)
113
+ in
114
+ {
115
+ filename = engine.scanner.filename;
116
+ source = engine.scanner.src;
117
+ parsetree = signature;
118
+ diagnostics;
119
+ invalid;
120
+ comments = List. rev engine.comments;
121
+ }
122
+
85
123
let printEngine =
86
124
{
87
125
printImplementation =
0 commit comments