@@ -106,6 +106,48 @@ let process_file sourcefile ?(kind ) ppf =
106
106
in
107
107
Config. uncurried := uncurried;
108
108
res
109
+
110
+ let reprint_source_file sourcefile =
111
+ let uncurried = ! Config. uncurried in
112
+ let kind = Ext_file_extensions. classify_input (Ext_filename. get_extension_maybe sourcefile) in
113
+ let sourcefile = set_abs_input_name sourcefile in
114
+ let res = match kind with
115
+ | Res ->
116
+ let parseResult =
117
+ Res_driver. parsingEngine.parseImplementation ~for Printer:true ~filename: sourcefile
118
+ in
119
+ if parseResult.invalid then (
120
+ Res_diagnostics. printReport parseResult.diagnostics parseResult.source;
121
+ exit 1
122
+ );
123
+ Res_compmisc. init_path () ;
124
+ parseResult.parsetree
125
+ |> Cmd_ppx_apply. apply_rewriters ~restore: false ~tool_name: Js_config. tool_name Ml
126
+ |> Ppx_entry. rewrite_implementation
127
+ |> Res_printer. printImplementation ~width: 100 ~comments: parseResult.comments
128
+ |> print_endline
129
+ | Resi ->
130
+ let parseResult =
131
+ Res_driver. parsingEngine.parseInterface ~for Printer:true ~filename: sourcefile
132
+ in
133
+ if parseResult.invalid then (
134
+ Res_diagnostics. printReport parseResult.diagnostics parseResult.source;
135
+ exit 1
136
+ );
137
+ Res_compmisc. init_path () ;
138
+ parseResult.parsetree
139
+ |> Cmd_ppx_apply. apply_rewriters ~restore: false ~tool_name: Js_config. tool_name Mli
140
+ |> Ppx_entry. rewrite_signature
141
+ |> Res_printer. printInterface ~width: 100 ~comments: parseResult.comments
142
+ |> print_endline
143
+ | _
144
+ ->
145
+ print_endline (" Invalid input for reprinting ReScript source. Must be a ReScript file: " ^ sourcefile);
146
+ exit 2
147
+ in
148
+ Config. uncurried := uncurried;
149
+ res
150
+
109
151
let usage = " Usage: bsc <options> <files>\n Options are:"
110
152
111
153
let ppf = Format. err_formatter
@@ -390,6 +432,9 @@ let buckle_script_flags : (string * Bsc_args.spec * string) array =
390
432
" -dsource" , set Clflags. dump_source,
391
433
" *internal* print source" ;
392
434
435
+ " -reprint-source" , string_call reprint_source_file,
436
+ " *internal* transform the target ReScript file using PPXes provided, and print the transformed ReScript code to stdout" ;
437
+
393
438
" -format" , string_call format_file,
394
439
" *internal* Format as Res syntax" ;
395
440
0 commit comments