@@ -275,35 +275,69 @@ module Delim = struct
275275 | None -> Some External_arg_spec. DNone
276276 | Some "json" -> Some DNoQuotes
277277 | Some "*j" -> Some DStarJ
278+ | Some "bq" -> Some DBackQuotes
278279 | _ -> None
279280
280281 type interpolation =
281- | Js (* string interpolation *)
282+ | BackQuotes (* string interpolation *)
283+ | Js (* simple double quoted string *)
282284 | 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
285287 | _ -> Unrecognized
286288
287289 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"
288292 let unescaped_js_delimiter = " js"
289- let escaped = Some escaped_j_delimiter
293+ let some_escaped_j_delimiter = Some escaped_j_delimiter
290294end
291295
292296let 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
294304 | Js ->
295305 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+ }
297318 | Unrecognized -> e
298319
299320let transform_pat (p : Parsetree.pattern ) s delim : Parsetree.pattern =
300- match Delim. parse_unprocessed delim with
321+ match Delim. parse_unprocessed false delim with
301322 | Js ->
302323 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+ }
304336 | Unrecognized -> p
305337
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
307341
308342let is_unescaped s = Ext_string. equal s Delim. unescaped_js_delimiter
309343
0 commit comments