@@ -165,6 +165,7 @@ module ResClflags : sig
165
165
val jsx_module : string ref
166
166
val jsx_mode : string ref
167
167
val typechecker : bool ref
168
+ val test_ast_conversion : bool ref
168
169
169
170
val parse : unit -> unit
170
171
end = struct
@@ -178,6 +179,7 @@ end = struct
178
179
let jsx_mode = ref " automatic"
179
180
let file = ref " "
180
181
let typechecker = ref false
182
+ let test_ast_conversion = ref false
181
183
182
184
let usage =
183
185
" \n \
@@ -215,6 +217,9 @@ end = struct
215
217
Arg. Unit (fun () -> typechecker := true ),
216
218
" Parses the ast as it would be passed to the typechecker and not the \
217
219
printer" );
220
+ ( " -test-ast-conversion" ,
221
+ Arg. Unit (fun () -> test_ast_conversion := true ),
222
+ " Test the ast conversion" );
218
223
]
219
224
220
225
let parse () = Arg. parse spec (fun f -> file := f) usage
@@ -225,7 +230,7 @@ module CliArgProcessor = struct
225
230
[@@ unboxed]
226
231
227
232
let process_file ~is_interface ~width ~recover ~target ~jsx_version
228
- ~jsx_module ~jsx_mode ~typechecker filename =
233
+ ~jsx_module ~jsx_mode ~typechecker ~ test_ast_conversion filename =
229
234
let len = String. length filename in
230
235
let process_interface =
231
236
is_interface
@@ -267,8 +272,17 @@ module CliArgProcessor = struct
267
272
else exit 1 )
268
273
else
269
274
let parsetree =
270
- Jsx_ppx. rewrite_signature ~jsx_version ~jsx_module ~jsx_mode
271
- parse_result.parsetree
275
+ if not test_ast_conversion then parse_result.parsetree
276
+ else
277
+ let tree0 =
278
+ Ast_mapper_to0. default_mapper.signature
279
+ Ast_mapper_to0. default_mapper parse_result.parsetree
280
+ in
281
+ Ast_mapper_from0. default_mapper.signature
282
+ Ast_mapper_from0. default_mapper tree0
283
+ in
284
+ let parsetree =
285
+ Jsx_ppx. rewrite_signature ~jsx_version ~jsx_module ~jsx_mode parsetree
272
286
in
273
287
print_engine.print_interface ~width ~filename
274
288
~comments: parse_result.comments parsetree
@@ -282,9 +296,19 @@ module CliArgProcessor = struct
282
296
~comments: parse_result.comments parse_result.parsetree
283
297
else exit 1 )
284
298
else
299
+ let parsetree =
300
+ if not test_ast_conversion then parse_result.parsetree
301
+ else
302
+ let tree0 =
303
+ Ast_mapper_to0. default_mapper.structure
304
+ Ast_mapper_to0. default_mapper parse_result.parsetree
305
+ in
306
+ Ast_mapper_from0. default_mapper.structure
307
+ Ast_mapper_from0. default_mapper tree0
308
+ in
285
309
let parsetree =
286
310
Jsx_ppx. rewrite_implementation ~jsx_version ~jsx_module ~jsx_mode
287
- parse_result. parsetree
311
+ parsetree
288
312
in
289
313
print_engine.print_implementation ~width ~filename
290
314
~comments: parse_result.comments parsetree
@@ -298,5 +322,6 @@ let () =
298
322
~width: ! ResClflags. width ~recover: ! ResClflags. recover
299
323
~target: ! ResClflags. print ~jsx_version: ! ResClflags. jsx_version
300
324
~jsx_module: ! ResClflags. jsx_module ~jsx_mode: ! ResClflags. jsx_mode
301
- ~typechecker: ! ResClflags. typechecker ! ResClflags. file)
325
+ ~typechecker: ! ResClflags. typechecker ! ResClflags. file
326
+ ~test_ast_conversion: ! ResClflags. test_ast_conversion)
302
327
[@@ raises exit]
0 commit comments