@@ -275,35 +275,69 @@ module Delim = struct
275
275
| None -> Some External_arg_spec. DNone
276
276
| Some "json" -> Some DNoQuotes
277
277
| Some "*j" -> Some DStarJ
278
+ | Some "bq" -> Some DBackQuotes
278
279
| _ -> None
279
280
280
281
type interpolation =
281
- | Js (* string interpolation *)
282
+ | BackQuotes (* string interpolation *)
283
+ | Js (* simple double quoted string *)
282
284
| Unrecognized (* no interpolation: delimiter not recognized *)
283
- let parse_unprocessed = function
284
- | "js" -> Js
285
+ let parse_unprocessed is_template = function
286
+ | "js" -> if is_template then BackQuotes else Js
285
287
| _ -> Unrecognized
286
288
287
289
let escaped_j_delimiter = " *j" (* not user level syntax allowed *)
290
+ let escaped_back_quote_delimiter = " bq"
291
+ let some_escaped_back_quote_delimiter = Some " bq"
288
292
let unescaped_js_delimiter = " js"
289
- let escaped = Some escaped_j_delimiter
293
+ let some_escaped_j_delimiter = Some escaped_j_delimiter
290
294
end
291
295
292
296
let transform_exp (e : Parsetree.expression ) s delim : Parsetree.expression =
293
- match Delim. parse_unprocessed delim with
297
+ let is_template =
298
+ Ext_list. exists e.pexp_attributes (fun ({txt} , _ ) ->
299
+ match txt with
300
+ | "res.template" | "res.taggedTemplate" -> true
301
+ | _ -> false )
302
+ in
303
+ match Delim. parse_unprocessed is_template delim with
294
304
| Js ->
295
305
let js_str = Ast_utf8_string. transform e.pexp_loc s in
296
- {e with pexp_desc = Pexp_constant (Pconst_string (js_str, Delim. escaped))}
306
+ {
307
+ e with
308
+ pexp_desc =
309
+ Pexp_constant (Pconst_string (js_str, Delim. some_escaped_j_delimiter));
310
+ }
311
+ | BackQuotes ->
312
+ {
313
+ e with
314
+ pexp_desc =
315
+ Pexp_constant
316
+ (Pconst_string (s, Delim. some_escaped_back_quote_delimiter));
317
+ }
297
318
| Unrecognized -> e
298
319
299
320
let transform_pat (p : Parsetree.pattern ) s delim : Parsetree.pattern =
300
- match Delim. parse_unprocessed delim with
321
+ match Delim. parse_unprocessed false delim with
301
322
| Js ->
302
323
let js_str = Ast_utf8_string. transform p.ppat_loc s in
303
- {p with ppat_desc = Ppat_constant (Pconst_string (js_str, Delim. escaped))}
324
+ {
325
+ p with
326
+ ppat_desc =
327
+ Ppat_constant (Pconst_string (js_str, Delim. some_escaped_j_delimiter));
328
+ }
329
+ | BackQuotes ->
330
+ {
331
+ p with
332
+ ppat_desc =
333
+ Ppat_constant
334
+ (Pconst_string (s, Delim. some_escaped_back_quote_delimiter));
335
+ }
304
336
| Unrecognized -> p
305
337
306
- let is_unicode_string opt = Ext_string. equal opt Delim. escaped_j_delimiter
338
+ let is_unicode_string opt =
339
+ Ext_string. equal opt Delim. escaped_j_delimiter
340
+ || Ext_string. equal opt Delim. escaped_back_quote_delimiter
307
341
308
342
let is_unescaped s = Ext_string. equal s Delim. unescaped_js_delimiter
309
343
0 commit comments